私は少し問題がありますが、私はFreeBSDを使用していますが、この問題はLinuxでも発生します。wxpythonはEVT_HELPをキャプチャしません
私は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()
が、これのdidnのようなパネルでそれを試してみましたどちらかといえば(そして私の場合はパネルを避けたい)。私が知っている唯一の可能性は、パネルまたはwx.CHAR_HOOK(パネルなしで動作)でwx.EVT_KEY_DOWNを使用することですが、どちらの場合でもすべてのkeyeventを関数にバインドして、F1またはむしろwx.EVT_HELPが必要です。
誰かが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))
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の場合)ですか? (テストコードのパネルを削除すると、キーなしで動作します)
あなたは[アクセラレータテーブル]ですべての作業を行っています(https://wxpython.org/docs/api/wx.AcceleratorTable-class.html)イベントにキーをバインドする方法として? – wnnmaw