2012-05-09 20 views
5

से उपयोगकर्ता इनपुट लौट रहा है मैं पाइथन और डब्ल्यूएक्स के लिए नया हूं। मैंने नीचे दिखाया गया एक सरल परीक्षण संवाद बनाया जो उपयोगकर्ता को एक combobox के साथ संकेत देता है। मैं अपने मुख्य कार्यक्रम में combox से मूल्य कैप्चर करना चाहता हूं। मैं इसे अपने मुख्य कार्यक्रम से कैसे कॉल करूं?पायथन डब्ल्यूएक्स - डब्ल्यूएक्स संवाद

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

संवाद फ़ाइल का नाम "उजागर" है:

यह मैं कैसे संवाद को प्रदर्शित करता है, लेकिन वर्तमान में कॉम्बो बक्से में से मूल्य पर कब्जा नहीं है कि यह कॉल करने के लिए उद्देश्य तय किया गया है। नीचे कोड है:

#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 

उत्तर

9

वहां बहुत सारे संवाद उदाहरण हैं।

असल में, तुम सब करने की जरूरत है अपने संवाद का दृष्टांत, यह दिखाने के है और फिर से पहले आप इसे बंद, निकालने: यहाँ एक जोड़े हैं महत्व।

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

अपडेट:: यहाँ एक अधिक पूर्ण उदाहरण है: यह करने के लिए विशिष्ट तरीका कुछ इस तरह है

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

माइक, उत्तर के लिए धन्यवाद। जब मैं res = myDlg.ShowModal() का उपयोग करता हूं तो यह काम नहीं करता है, लेकिन अगर मैं इसे res <> myDlg.ShowModal() में बदलता हूं तो यह काम करता है। तुम जानते हो क्यों? धन्यवाद। – user1314011

+0

यह काम करना चाहिए। मुझे क्या पता चल रहा है यह जानने के लिए मुझे एक चलने योग्य उदाहरण और ट्रेसबैक की आवश्यकता होगी। –

+0

कस्टम संवाद के साथ-साथ मुख्य एप्लिकेशन में कौन सा कोड होना चाहिए, यह जोड़ना अच्छा होगा। ओपीएस सवाल zetcode कस्टम संवाद उदाहरण द्वारा कवर नहीं है – Anake