2012-05-09 9 views
5

Soy nuevo en Python y WX. Creé un diálogo de prueba simple que se muestra a continuación que solicita al usuario un cuadro combinado. Me gustaría capturar el valor de la combox en mi programa principal. ¿Cómo lo llamo desde mi programa principal?Python WX - Devolver entrada de usuario desde wx Dialog

Esta es la forma en que estaba proponiéndose a llamar así muestra el diálogo, pero que actualmente no captura el valor del cuadro combinado:

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

El nombre del archivo de diálogo es "punto culminante". A continuación se muestra el código:

#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 

Respuesta

9

Existen muchos ejemplos de diálogo. Aquí hay un par:

Básicamente, todo lo que tiene que hacer es crear una instancia de su diálogo, muestran a continuación, antes de cerrarlo, el extracto el valor. La forma típica de hacer es algo como esto:

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

Actualización: Aquí es un ejemplo más de pleno derecho:

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, Gracias por la respuesta. Cuando uso res = myDlg.ShowModal() no funciona, pero si lo cambio a res <> myDlg.ShowModal() funciona. ¿Sabes por qué? Gracias. – user1314011

+0

Debería funcionar. Necesitaría un ejemplo ejecutable y un rastreo para saber qué está pasando. –

+0

sería bueno agregar qué código debe estar en el diálogo personalizado así como en la aplicación principal. La pregunta de OP no está cubierta por el ejemplo de diálogo personalizado zetcode – Anake

Cuestiones relacionadas