我有一点问题,我使用的是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)不够灵敏,无法接收关键事件? (当我删除测试代码中的面板时,它没有任何密钥。)