我正在为Linux内的Xboxdrv包编写GUI。我希望人们能够使用这个GUI在Linux内部配置他们的Xbox360,PS3或任何其他类型的控制器作为鼠标,游戏手柄等。
我很好奇如何通过GUI操作调用函数。
例如,我单击我创建的菜单按钮,它调用存储在我的wx.Frame中的函数。
答案 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。
祝你好运!