Ich habe ein kleines Problem, ich verwende FreeBSD, aber dieses Problem tritt auch auf Linux.wxpython nicht erfassen EVT_HELP
ich versuche, eine wx.EVT_HELP durch die Verwendung der Taste F1 zu senden, aber es passiert nichts:
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()
Ich versuchte es mit einem Panel wie in 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()
aber dieses didn Ich arbeite auch nicht (und ich möchte Panel in meinem Fall verhindern). Die einzigen Möglichkeiten, die ich kenne, sind wx.EVT_KEY_DOWN mit Panels oder wx.CHAR_HOOK (funktioniert ohne Panels), aber in beiden Fällen binden sie jedes keyEvent an meine Funktion und ich möchte nur F1 oder besser wx.EVT_HELP.
Weiß jemand wie ich F1 mit wx.EVT_HELP verbinden kann, damit mein erster Code funktioniert?
Danke für Ihre Zeit!
Vielen Dank für Ihre Hilfe! Das AcceleratorTable ist etwas, nach dem ich gesucht habe! Aber ich nicht, warum ein Bedarf an einer Platte besteht, mein Testcode
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()
funktioniert, aber es ist nicht einmal das Panel. Gibt es eine Möglichkeit, ein Panel zu umgehen? Oder ist ein Frame (mit Unix) nicht empfindlich genug, um die Keyevents zu empfangen? (Wenn ich das Panel in meinem Testcode lösche, funktioniert es ohne Schlüssel.)
Haben Sie Arbeiten mit [Beschleuniger Tabellen] getan (https://wxpython.org/docs/api/wx.AcceleratorTable-class.html) als eine Methode zur Bindung von Schlüsseln an Ereignisse? – wnnmaw