我正在为 Linux 中的 Xboxdrv 包编写 GUI。我希望人们能够使用这个 GUI 将他们的 Xbox360、PS3 或任何其他类型的控制器配置为 Linux 中的鼠标、游戏手柄等。
我很好奇如何从 GUI 操作中调用函数。
例如,我单击一个我创建的菜单按钮,它调用存储在我的 wx.Frame 中的一个函数。
我正在为 Linux 中的 Xboxdrv 包编写 GUI。我希望人们能够使用这个 GUI 将他们的 Xbox360、PS3 或任何其他类型的控制器配置为 Linux 中的鼠标、游戏手柄等。
我很好奇如何从 GUI 操作中调用函数。
例如,我单击一个我创建的菜单按钮,它调用存储在我的 wx.Frame 中的一个函数。
如果我理解您的问题,您将创建一个菜单项,并且您想知道当用户单击它时如何执行该功能。
这很简单。你需要这个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)
. 这也很重要。当函数绑定到事件时,事件总是作为第一个参数传递给该函数。你需要能够处理这个问题。
你可以在这里找到一个很好的教程。
祝你好运!