0

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

我很好奇如何从 GUI 操作中调用函数。

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

4

1 回答 1

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). 这也很重要。当函数绑定到事件时,事件总是作为第一个参数传递给该函数。你需要能够处理这个问题。

你可以在这里找到一个很好的教程。

祝你好运!

于 2012-06-15T05:42:08.487 回答