在def里面执行wx.Frame?

时间:2012-06-15 05:04:55

标签: wxpython

我正在为Linux内的Xboxdrv包编写GUI。我希望人们能够使用这个GUI在Linux内部配置他们的Xbox360,PS3或任何其他类型的控制器作为鼠标,游戏手柄等。

我很好奇如何通过GUI操作调用函数。

例如,我单击我创建的菜单按钮,它调用存储在我的wx.Frame中的函数。

1 个答案:

答案 0 :(得分:0)

如果我理解您的问题,您可以创建一个菜单项,并且想知道当用户点击它时如何执行该功能。

这很简单。您需要self.Bind()功能。看看这个:

ID_MY_MENU_FUNCTION = wx.NewId() #declares a new, unique ID for my menu

class Frame(wx.Frame):
    def __init__(self, parent, idNum, title):
        wx.Frame.__init__(self, parent, idNum, title)

        menu = wx.Menu()
        menu.Append(ID_MY_MENU_FUNCTION, 'My Function') #add my function to the menu

        menu_bar = wx.MenuBar()
        menu_bar.Append(menu, 'My Menu') #add my menu to the menu bar

        self.SetMenuBar(menu_bar) #set the menu bar

        self.Bind(wx.EVT_MENU, self.myFunction, id=ID_My_MEN_FUNCTION) #run self.myFunction() when someone clicks the menu item

    def myFunction(event):
        #perform your function here

调用self.Bind()时设置id参数很重要。这意味着,如果self.myFunction()wx.EVT_MENU参数具有相同的ID,则仅调用id。此外,每个菜单项都需要它自己的唯一ID,否则您的应用程序将无法分辨用户点击的菜单项。

同样非常重要的是,在self.Bind()中,当你想要将事件绑定到哪个函数时,包括self但不包括()。这就是我写self.myFunction的原因。

最后,请注意我如何定义myFunctio(event)的方法。这也很重要。当函数绑定到事件时,事件始终作为该函数的第一个参数传递。你需要能够处理这个问题。

你可以找到一个非常好的教程here

祝你好运!