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

2番目のクラスでダイアログを作成し、閉じた後、ダイアログの情報を1番目のクラスコンポーネントのコンポーネントに転送する必要があります。うまくいきません。どんな助けでも大歓迎です。

4

2 に答える 2

0

ダイアログの [OK] ボタンと [キャンセル] ボタンにイベント ハンドラーを使用する必要はありません。これらのボタンにストック 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 に答える