wxpython不能捕获EVT_HELP

时间:2017-05-10 14:01:15

标签: python events wxpython keyboard-events

我有一点问题,我使用的是FreeBSD,但这个问题也出现在linux上。

我尝试通过使用键F1发送wx.EVT_HELP,但没有任何反应:

import logging as log
import wx

class MainWindow(wx.Frame):
    def __init__(self, parent, title):
        wx.Frame.__init__(self, parent, title=title, size=(200,100))

        self.Bind(wx.EVT_HELP, self.function)
        self.SetFocus()
        self.Show(True)

    def function(self, event=None):
        print "drin"

if __name__ == "__main__":
    app = wx.App(False)
    gui = MainWindow(None, "test")
    app.MainLoop()

我尝试使用wxpython can't capture EVT_KEY_DOWN enent

中的面板
import logging as log
import wx

class MainWindow(wx.Frame):
    def __init__(self, parent, title):
        wx.Frame.__init__(self, parent, title=title, size=(200,100))

        self.panel = wx.Panel(self, wx.ID_ANY)
        self.panel.Bind(wx.EVT_HELP, self.function)
        self.panel.SetFocus()
        self.Show(True)

    def function(self, event=None):
        print "drin"

if __name__ == "__main__":
    app = wx.App(False)
    gui = MainWindow(None, "test")
    app.MainLoop()

但是这也没有用(我想在我的情况下阻止面板)。我知道的唯一可能性是将wx.EVT_KEY_DOWN与面板或wx.CHAR_HOOK一起使用(不使用面板)但在两种情况下它们都将每个键事件绑定到我的函数中,我只想要F1或者更确切地说是wx.EVT_HELP。

有人知道我如何使用wx.EVT_HELP连接F1,以便我的第一个代码能够正常工作吗?

谢谢你的时间!

感谢您的帮助! AcceleratorTable是我一直在寻找的东西!但我不明白为什么需要一个面板,我的测试代码

import logging as log
import wx

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

        wx.Frame.__init__(self, parent, title=title, size=(200,100))
        wx.Panel(self, wx.ID_ANY)
        f1_id = wx.NewId()
        self.Bind(wx.EVT_MENU, self.function, id = f1_id)
        accel_tbl = wx.AcceleratorTable([(wx.ACCEL_NORMAL, wx.WXK_F1, f1_id)])
        self.SetAcceleratorTable(accel_tbl)
        self.SetFocus()
        self.Show(True)

    def function(self, event=None):
        print "drin"

if __name__ == "__main__":
    app = wx.App(False)
    gui = MainWindow(None, "test")
    app.MainLoop()

有效,但即使使用面板也是如此。是否有可能围绕一个小组工作?或者是一个框架(使用unix)不够灵敏,无法接收关键事件? (当我删除测试代码中的面板时,它没有任何密钥。)

0 个答案:

没有答案