Wx 小部件不可点击

问题描述

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

画廊

enter image description here

代码

############################################################################################################################################
#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)
        t = wx.StaticText(self,-1,"This is the second tab",(20,20))

class TabThree(wx.Panel):
    def __init__(self,"This is the third tab",20))

class TabFour(wx.Panel):
    def __init__(self,"This is the last tab",20))


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



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

class mainWindow(wx.MDIParentFrame):
    def __init__(self):
        wx.MDIParentFrame.__init__(self,None,"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,u"Frame2",0)
        # self.m_staticText1.Wrap(-1)
        # mainPanel_secondSizer.Add(self.m_staticText1,wx.ALL,5)

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

        main_Panel_Box_Sizer.Add(mainPanel_secondSizer,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,wx.EXPAND | wx.ALL,0)
        bSizer_topFrame.Add(bsecSizer_topFrame,0)

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

    def OnNewWindow(self,evt):
        win = wx.MDIChildFrame(self,"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)

对于其他问题,你能不能说得更具体更清楚些?