【问题标题】:Executing wx.Frame inside def?在def中执行wx.Frame?
【发布时间】:2012-06-15 05:04:55
【问题描述】:

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

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

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

【问题讨论】:

  • 如果您可以发布一些您已经编写的代码,它将帮助我们更好地理解您的问题。
  • def Here(self,event): class XBOX(wx.Frame): def __init__(self,parent,id): wx.frame.__init__(self,parent,id,'XboxDrv ManPage' ,size=(300,200)) app = wx.App() app.MainLoop()
  • 抱歉,我无法在评论框中正确发布代码草率。

标签: wxpython


【解决方案1】:

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

这很简单。您需要 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 参数很重要。这意味着只有当wx.EVT_MENUid 参数具有相同的ID 时,才会调用self.myFunction()。此外,每个菜单项都需要它自己的唯一 ID,否则您的应用程序将无法判断用户单击了哪个菜单项。

self.Bind() 中,当说要将事件绑定到哪个函数时,包括self 但不要包括(),这一点也很重要。这就是我写self.myFunction的原因。

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

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

祝你好运!

【讨论】:

  • 啊,非常感谢你。这有很大帮助。我照你说的做了。我留下了 ID,当添加 ID 时它起作用了。感谢您帮助像我这样的菜鸟。我还在学习编程 GUI 的
  • @enjoipython 是的,ID 很重要,因为有很多菜单项,所有这些都会导致wx.EVT_MENU,因此您需要能够判断单击了哪个菜单项。很高兴我能帮上忙。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-13
  • 1970-01-01
  • 2015-08-07
  • 1970-01-01
  • 1970-01-01
  • 2012-02-01
  • 2017-11-27
相关资源
最近更新 更多