Wx 小部件不可点击

Wx Widgets not clickable

我是 wxPython 的新手,仍在尝试理解基本的工作流程,我已经设法创建了这个 window,它有一个菜单栏和下面的选项卡,但是按钮都是不可点击的,选项卡不可选择,第一帧中的按钮事件在用户第一次点击时被调用 运行

图库

代码

############################################################################################################################################
#BEGINNING OF TABS
############################################################################################################################################

# Define the tab content as classes:
class TabOne(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        button = wx.Button(self, label = "Hello World")
        button.Bind(wx.EVT_BUTTON, self.showDialog())

    def showDialog(self):
        wx.MessageBox("A Dialog Example", "Information", wx.OK | wx.ICON_INFORMATION)


class TabTwo(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        t = wx.StaticText(self, -1, "This is the second tab", (20,20))

class TabThree(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        t = wx.StaticText(self, -1, "This is the third tab", (20,20))

class TabFour(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        t = wx.StaticText(self, -1, "This is the last tab", (20,20))


############################################################################################################################################
#END OF TABS
############################################################################################################################################



############################################################################################################################################
## Class MAIN WINDOW
############################################################################################################################################

class mainWindow(wx.MDIParentFrame):
    def __init__(self):
        wx.MDIParentFrame.__init__(self, None, -1, "Cocab Tech Solutions Main Window", size=(600, 400))


        #BEGIN MENU
        menu = wx.Menu()
        menu.Append(5000, "New Window")
        menu.Append(5001, "Exit")
        menubar = wx.MenuBar()
        menubar.Append(menu, "File")

        self.SetMenuBar(menubar)
        self.Bind(wx.EVT_MENU, self.OnNewWindow, id=5000)
        self.Bind(wx.EVT_MENU, self.OnExit, id=5001)

        #Define Sizers
        self.SetSizeHints(wx.DefaultSize, wx.DefaultSize)
        bSizer_topFrame = wx.BoxSizer(wx.VERTICAL)
        bsecSizer_topFrame = wx.BoxSizer(wx.VERTICAL)

        self.main_Panel = wx.Panel(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL)
        main_Panel_box_Sizer = wx.BoxSizer(wx.VERTICAL)
        mainPanel_secondSizer = wx.BoxSizer(wx.VERTICAL)

        #BEGIN TABS
        # Create a panel and notebook (tabs holder)
        nb = wx.Notebook(self.main_Panel, id=4, pos=wx.DefaultPosition, size=wx.DefaultSize, style=wx.NB_DEFAULT,   name=wx.NotebookNameStr)

        # Create the tab windows
        tab1 = TabOne(nb)
        tab2 = TabTwo(nb)
        tab3 = TabThree(nb)
        tab4 = TabFour(nb)

        # Add the windows to tabs and name them.
        nb.AddPage(tab1, "Tab 1")
        nb.AddPage(tab2, "Tab 2")
        nb.AddPage(tab3, "Tab 3")
        nb.AddPage(tab4, "Tab 4")

        mainPanel_secondSizer.Add(nb, 1, wx.EXPAND)

        # self.m_staticText1 = wx.StaticText(self.main_Panel, wx.ID_ANY, u"Frame2", wx.DefaultPosition, wx.DefaultSize, 0)
        # self.m_staticText1.Wrap(-1)
        # mainPanel_secondSizer.Add(self.m_staticText1, 0, wx.ALL, 5)

        self.testButton = wx.Button(self.main_Panel, wx.ID_ANY, u"MyButton", wx.DefaultPosition, wx.DefaultSize, 0)
        mainPanel_secondSizer.Add(self.testButton, 0, wx.ALL, 5)
        self.testButton.Bind(wx.EVT_BUTTON, self.on_open_frame)

        main_Panel_box_Sizer.Add(mainPanel_secondSizer, 1, wx.ALL | wx.EXPAND, 0)

        self.main_Panel.SetSizer(main_Panel_box_Sizer)
        self.main_Panel.Layout()
        main_Panel_box_Sizer.Fit(self.main_Panel)

        bsecSizer_topFrame.Add(self.main_Panel, 1, wx.EXPAND | wx.ALL, 0)
        bSizer_topFrame.Add(bsecSizer_topFrame, 1, wx.ALL | wx.EXPAND, 0)

        self.SetSizer(bSizer_topFrame)
        self.Layout()
        self.Centre(wx.BOTH)

    def OnNewWindow(self, evt):
        win = wx.MDIChildFrame(self, -1, "Child Window")
        win.Show(True)

    def OnExit(self, evt):
        self.Close(True)

    def on_open_frame(self, event):
        print("Clicked")

对于没有点击的按钮发出的事件:

当你绑定它时,而不是这样:

button.Bind(wx.EVT_BUTTON, self.showDialog())

你必须这样做:

button.Bind(wx.EVT_BUTTON, self.showDialog)

其他的问题,能不能说得更具体清楚一些?