2012-05-09 40 views
5

Python ve WX cihazlarında yeniyim. Kullanıcıyı bir açılan kutuyla soran basit bir test iletişim kutusu oluşturdum. Ana programımdaki combox'tan değeri almak istiyorum. Ana programımdan nasıl ararım? Diyalog dosyanın adı "vurgulamak"Python WX - wx Dialog'dan kullanıcı girdisini döndürme

import highlight 
    highlight.create(self).Show(True) 
    a = highlight.OnComboBox1Combobox(self) 
    print a 

geçerli:

Bu

Ben iletişim görüntüler ancak şu anda combobox'dan değerini yakalamak olmadığını diyoruz ulaştırmayı hedeflemektedir nasıl olduğunu. Aşağıda kodudur:

#Boa:Dialog:Dialog2 

import wx 

def create(parent): 
    return Dialog2(parent) 

[wxID_DIALOG2, wxID_DIALOG2COMBOBOX1, wxID_DIALOG2STATICTEXT1, 
] = [wx.NewId() for _init_ctrls in range(3)] 

class Dialog2(wx.Dialog): 
    def _init_ctrls(self, prnt): 
     # generated method, don't edit 
     wx.Dialog.__init__(self, id=wxID_DIALOG2, name='', parent=prnt, 
       pos=wx.Point(264, 140), size=wx.Size(400, 485), 
       style=wx.DEFAULT_DIALOG_STYLE, title='Dialog2') 
     self.SetClientSize(wx.Size(384, 447)) 

     self.comboBox1 = wx.ComboBox(choices=['test1', 'test2'], 
       id=wxID_DIALOG2COMBOBOX1, name='comboBox1', parent=self, 
       pos=wx.Point(120, 16), size=wx.Size(130, 21), style=0, 
       value=u'wining\n') 
     self.comboBox1.SetToolTipString(u'comboBox1') 
     self.comboBox1.SetLabel(u'wining\n') 
     self.comboBox1.Bind(wx.EVT_COMBOBOX, self.OnComboBox1Combobox, 
       id=wxID_DIALOG2COMBOBOX1) 

     self.staticText1 = wx.StaticText(id=wxID_DIALOG2STATICTEXT1, 
       label=u'test', name='staticText1', parent=self, pos=wx.Point(88, 
       16), size=wx.Size(19, 13), style=0) 

    def __init__(self, parent): 
     self._init_ctrls(parent) 


     ##print get_selection 
     ##print get_selection1 

    def OnComboBox1Combobox(self, event): 
     get_selection = self.comboBox1.GetValue() 
     return get_selection 

cevap

9

orada iletişim örnekler çok var.

, yapmanız gereken tüm senin iletişim örneğini göstermek ve daha sonra kapatmadan önce, özü: İşte bir çift değer.

myDlg = MyDialog() 
res = myDlg.ShowModal() 
if res == wx.ID_OK: 
    value = myDlg.myCombobox.GetValue() 
myDlg.Destroy() 

Güncelleme: Burada daha tam teşekküllü örnek: bunu yapmak için tipik yolu böyle bir şeydir

import wx 

######################################################################## 
class MyDialog(wx.Dialog): 
    """""" 

    #---------------------------------------------------------------------- 
    def __init__(self): 
     """Constructor""" 
     wx.Dialog.__init__(self, None, title="Dialog") 

     self.comboBox1 = wx.ComboBox(self, 
            choices=['test1', 'test2'], 
            value="") 
     okBtn = wx.Button(self, wx.ID_OK) 

     sizer = wx.BoxSizer(wx.VERTICAL) 
     sizer.Add(self.comboBox1, 0, wx.ALL|wx.CENTER, 5) 
     sizer.Add(okBtn, 0, wx.ALL|wx.CENTER, 5) 
     self.SetSizer(sizer) 

######################################################################## 
class MainProgram(wx.Frame): 
    """""" 

    #---------------------------------------------------------------------- 
    def __init__(self): 
     """Constructor""" 
     wx.Frame.__init__(self, None, title="Main Program") 
     panel = wx.Panel(self) 

     btn = wx.Button(panel, label="Open dialog") 
     btn.Bind(wx.EVT_BUTTON, self.onDialog) 

     self.Show() 

    #---------------------------------------------------------------------- 
    def onDialog(self, event): 
     """""" 
     dlg = MyDialog() 
     res = dlg.ShowModal() 
     if res == wx.ID_OK: 
      print dlg.comboBox1.GetValue() 
     dlg.Destroy() 

if __name__ == "__main__": 
    app = wx.App(False) 
    frame = MainProgram() 
    app.MainLoop() 
+0

Mike cevap için teşekkür ederiz. Res = myDlg.ShowModal() kullandığımda işe yaramıyor, ancak <> myDlg.ShowModal() işlevini değiştirdiğimde çalışır. Neden biliyor musun? Teşekkürler. – user1314011

+0

Çalışmalı. Neler olup bittiğini öğrenmek için koşulabilir bir örneğe ve izlemeye ihtiyacım var. –

+0

, özel iletişimde ve ana uygulamada hangi kodun olması gerektiğini eklemek iyi olur. OP'ler sorusu, zetcode özel iletişim örneği tarafından kapsanmamaktadır. – Anake