-1

我有以下代码:

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()   

在 2nd Class 我创建了一个对话框,关闭后对话框的信息应该被传输到 1st Class 组件中的组件。它不起作用。任何帮助表示赞赏。

4

2 回答 2

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...
于 2013-01-16T19:29:50.060 回答
0

您的问题是,在 ok 案例的事件处理程序中,您正在创建 CortizadorWindow 的新实例,而不是访问对已经实例化的实例的引用。

于 2013-01-12T21:33:40.607 回答