wxpython don';无法捕获EVT\u帮助
我有一个小问题,我正在使用FreeBSD,但这个问题也发生在linux上 我尝试使用F1键发送wx.EVT_帮助,但什么也没发生:wxpython don';无法捕获EVT\u帮助,python,events,wxpython,keyboard-events,Python,Events,Wxpython,Keyboard Events,我有一个小问题,我正在使用FreeBSD,但这个问题也发生在linux上 我尝试使用F1键发送wx.EVT_帮助,但什么也没发生: 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.B
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()
我用一块面板试过了,就像
但这也不起作用(在我的案例中,我希望阻止面板)。我知道的唯一可能性是使用wx.EVT_KEY_DOWN和panels或wx.CHAR_HOOK(在没有panels的情况下工作),但在这两种情况下,它们都会将每个keyevent绑定到我的函数,我只需要F1或者更确切地说wx.EVT_帮助
有人知道我如何将F1与wx.EVT_帮助连接起来,以便我的第一个代码可以工作吗
谢谢你的时间
谢谢你的帮助!加速器是我一直在寻找的东西!但我不明白为什么需要一个面板,我的测试代码
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的)帧不够敏感,无法接收keyevents?(当我在测试代码中删除面板时,它不带任何键即可工作。)您需要使用
wx.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))
self.panel = wx.Panel(self, wx.ID_ANY)
self.panel.Bind(wx.EVT_HELP, self.function)
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.Show(True)
def function(self, event=None):
print "drin"
if __name__ == "__main__":
app = wx.App(False)
gui = MainWindow(None, "test")
app.MainLoop()
这对我来说适用于wxPython 3.0.2。使用Python 2.7.12在Xubuntu 16.04上实现经典
有关此主题的更多信息:
wx.Frame
中有一个。原因是,如果我没记错的话,该面板将为框架提供跨平台的正确外观,并在小部件之间启用选项卡。EVT_帮助事件通常不会自动绑定到F1。你需要帮点忙,就像迈克用加速表展示的那样,或者用其他方法处理它。但是,如果您有一个wx.ContextHelpButton,或者自己使用wx.ContextHelp类,那么您将获得EVT_帮助事件。有关更多详细信息,请参阅文档和演示。
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)
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.Show(True)
def function(self, event=None):
print "drin"
if __name__ == "__main__":
app = wx.App(False)
gui = MainWindow(None, "test")
app.MainLoop()