我有以下代码:
import wx
class CotizadorWindow(wx.Frame):
def __init__(self):
super(CotizadorWindow,self).__init__(None)
self.CreateInteriorWindowComponents()
self.SetTitle(u"Cotizador")
def CreateInteriorWindowComponents(self):
self.hbox=wx.BoxSizer(wx.VERTICAL)
self.panel1=wx.Panel(self,-1,style=wx.SIMPLE_BORDER)
self.SetSizer(self.hbox)
self.Centre()
self.hbox.Add(self.panel1,1,wx.EXPAND|wx.ALL,3)
wx.StaticText(self.panel1,label=u"Cotización", pos=(10,10))
self.bxCotizacion=wx.TextCtrl(self.panel1,size=(80,-1),pos=(80,8))
self.btnAltaCliente=wx.Button(self.panel1,label='Alta cliente', pos=(100,37))
self.btnAltaCliente.Bind(wx.EVT_BUTTON,self.Alta)
def Alta(self,event):
altacliente=DlgAltaCliente(None, title='Nuevo Cliente')
altacliente.ShowModal()
altacliente.Destroy()
def ClearCliente2(self):
self.bxCotizacion.Value='1'
class DlgAltaCliente (wx.Dialog):
def __init__(self,*args,**kw):
super(DlgAltaCliente,self).__init__(*args,**kw)
self.InitUI()
self.SetSize((200,200))
self.SetTitle("Alta de Cliente")
def InitUI(self):
pnl=wx.Panel(self)
vbox=wx.BoxSizer(wx.VERTICAL)
hbox=wx.BoxSizer(wx.HORIZONTAL)
okButton=wx.Button(self,label='OK')
closeButton=wx.Button(self,label='Cancelar')
hbox.Add(okButton)
hbox.Add(closeButton, flag=wx.LEFT,border=5)
vbox.Add(pnl,proportion=1, flag=wx.ALL|wx.EXPAND,border=5)
vbox.Add(hbox,flag=wx.ALIGN_CENTER|wx.TOP|wx.BOTTOM, border=10)
self.SetSizer(vbox)
okButton.Bind(wx.EVT_BUTTON,self.EvtGuardarCliente)
closeButton.Bind(wx.EVT_BUTTON,self.EvtOnClose)
def EvtGuardarCliente(self,event):
self.Destroy()
cotizador=CotizadorWindow()
cotizador.ClearCliente2()
def EvtOnClose(self,event):
self.Destroy()
app=wx.App()
frame=CotizadorWindow()
frame.Show()
frame.Maximize()
app.MainLoop()
在第二类我创建一个对话框,关闭后,对话框的信息应该转移到第一类组件中的组件。它不起作用。任何帮助表示赞赏。
答案 0 :(得分:0)
您的问题是,在ok情况的事件处理程序中,您正在创建CortizadorWindow的新实例,而不是访问已经实例化的实例。
答案 1 :(得分:0)
对话框的“确定”和“取消”按钮无需使用事件处理程序。只需使用股票ID wx.ID_OK和wx.ID_CANCEL这些按钮,默认处理程序将为您做正确的事情,包括验证对话框控件是否有验证器,然后调用EndModal。
然后在创建和显示对话框的代码中,典型的使用模式是这样的:
def Alta(self,event):
altacliente=DlgAltaCliente(None, title='Nuevo Cliente')
if altacliente.ShowModal() == wx.ID_OK:
# fetch values from the dialog
self.someValue = altacliente.getSomeValue()
altacliente.Destroy()
使用对话框作为上下文管理器也是可能的,它会在完成后自动调用Destroy:
def Alta(self, event):
with DlgAltaCliente(None, title='Nuevo Cliente') as dlg:
if dlg.ShowModal() == wx.ID_OK:
# do something with dlg values...