Могу ли я привязать кнопку OK на первой панели к функции, которая запускается, и проверить, указан ли правильный идентификатор, и если правильно, появится следующая панель

#wxpython

#wxpython

Вопрос:

 import wx
class MainFrame (wx.Frame):
    def __init__( self, parent ):
        wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 800,600 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )
        self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )
        bSizer1 = wx.BoxSizer( wx.VERTICAL )
        self.SetSizer( bSizer1 )
        self.Layout()

        self.Centre( wx.BOTH )
    def __del__( self ):
        pass
class first_panel ( wx.Panel ):
    def __init__( self, parent ):
        wx.Panel.__init__ ( self, parent, id = wx.ID_ANY, pos = wx.DefaultPosition, size = wx.Size( 800,600 ), style = wx.TAB_TRAVERSAL )
        sizer = wx.GridBagSizer(5, 5)
        greetings = wx.StaticText(self, label='Welcome to 24-hour ATM service')
        sizer.Add(greetings, pos=(0, 0), flag=wx.TOP|wx.LEFT|wx.BOTTOM, border=15)
        line = wx.StaticLine(self)
        sizer.Add(line, pos=(1, 0), span=(1, 5), flag=wx.EXPAND|wx.BOTTOM, border=10)
        customerIdText = wx.StaticText(self, label="Customer Id")
        sizer.Add(customerIdText, pos=(3, 0), flag=wx.LEFT|wx.TOP, border=10)
        customerIdInput = wx.TextCtrl(self)
        sizer.Add(customerIdInput, pos=(3, 1), span=(1, 3), flag=wx.TOP|wx.EXPAND, border=5)
        okButton = wx.Button(self, label="Ok")
        sizer.Add(okButton, pos=(4, 3), span=(1, 1))
        okButton.Bind(wx.EVT_BUTTON, self.OnOkClicked)
        cancelButton = wx.Button(self, label="Cancel")
  

Ответ №1:

Вы можете либо использовать несколько классов, либо выполнить задачу в рамках одного класса.
Поскольку процесс кажется последовательным, для начала может быть проще сделать все это в одном классе.
Надеюсь, вы ищете что-то вроде этого.

 import wx

choices=["Withdraw Cash","Make a deposit","Check Balance"]

class Example(wx.Frame):

    def __init__(self, parent, title):
        super(Example, self).__init__(parent, title=title, size=(750,-1))
        self.Customer_panel()
        self.Show()

    def Customer_panel(self):
        self.panel = wx.Panel(self, -1)
        sizer = wx.BoxSizer(wx.VERTICAL)
        text = wx.StaticText(self.panel, label="Customer Id:")
        sizer.Add(text, 0, flag=wx.ALL, border=5)
        self.customer_id = wx.TextCtrl(self.panel)
        sizer.Add(self.customer_id, 0, flag=wx.ALL, border=5)
        next = wx.Button(self.panel, label="Login")
        sizer.Add(next, 0, flag=wx.ALL, border=5)
        self.panel.SetSizerAndFit(sizer)
        next.Bind(wx.EVT_BUTTON, self.OnNext_1)
        self.customer_id.SetFocus()

    def OnNext_1(self, event):
        self.CustId = self.customer_id.GetValue()
        if self.CustId != "1442":
            wx.MessageBox("Incorrect Customer Id","Error", wx.OK | wx.ICON_ERROR)
            self.customer_id.SetValue('')
            self.customer_id.SetFocus()
            return
        self.panel.Destroy()
        self.Transaction_type_panel()

    def Transaction_type_panel(self):
        self.panel = wx.Panel(self, -1)
        sizer = wx.BoxSizer(wx.VERTICAL)
        text = wx.StaticText(self.panel, label="Customer Id: " str(self.CustId))
        sizer.Add(text, 0, flag=wx.ALL, border=5)
        self.trans_type = wx.ComboBox(self.panel, -1, "Transaction type", choices=choices)
        sizer.Add(self.trans_type, 0, flag=wx.ALL, border=5)
        next = wx.Button(self.panel, label="Next")
        sizer.Add(next, 0, flag=wx.ALL, border=5)
        back = wx.Button(self.panel, label="Back")
        sizer.Add(back, 0, flag=wx.ALL, border=5)
        exit = wx.Button(self.panel, label="Exit")
        sizer.Add(exit, 0, flag=wx.ALL, border=5)
        self.panel.SetSizerAndFit(sizer)
        next.Bind(wx.EVT_BUTTON, self.OnNext_2)
        back.Bind(wx.EVT_BUTTON, self.OnBack_2)
        exit.Bind(wx.EVT_BUTTON, self.OnExit_2)
        self.trans_type.SetSelection(0)

    def OnNext_2(self, event):
        self.Type = self.trans_type.GetSelection()
        self.panel.Destroy()
        self.Transaction_panel()

    def OnBack_2(self, event):
        self.panel.Destroy()
        self.Customer_panel()

    def OnExit_2(self, event):
        self.Destroy()

    def Transaction_panel(self):
        self.panel = wx.Panel(self, -1)
        sizer = wx.BoxSizer(wx.VERTICAL)
        text = wx.StaticText(self.panel, label="Customer Id: " str(self.CustId))
        sizer.Add(text, 0, flag=wx.ALL, border=5)
        text2 = wx.StaticText(self.panel, label="You chose to " choices[self.Type])
        sizer.Add(text2, 0, flag=wx.ALL, border=5)
        exit = wx.Button(self.panel, label="Exit")
        sizer.Add(exit, 0, flag=wx.ALL, border=5)
        back = wx.Button(self.panel, label="Back")
        sizer.Add(back, 0, flag=wx.ALL, border=5)
        self.panel.SetSizerAndFit(sizer)
        exit.Bind(wx.EVT_BUTTON, self.OnExit_3)
        back.Bind(wx.EVT_BUTTON, self.OnBack_3)

    def OnExit_3(self, event):
        self.Destroy()

    def OnBack_3(self, event):
        self.panel.Destroy()
        self.Transaction_type_panel()

app = wx.App()
Example(None, title='Sequential Panels')
app.MainLoop()
  

Комментарии:

1. @Joejoe Вы можете принять ответ, нажав на серую галочку рядом с ответом. Или, если это было полезно, но не дало ответа на вопрос, щелкните стрелку вверх. Если это было совершенно бесполезно, щелкните стрелку вниз.