目前,我正在wxPython最终高中项目上工作,并且我面临另一个问题,我想将击键组合项(例如CTRL + S ...)绑定到我的函数中,但是我无法实现能满足要求的结果我的期望。
我已经尝试过了,但是没有绑定按键。
accelnum = 2
accelerators = [wx.AcceleratorEntry() for x in range(accelnum)]
accelerators[0].Set(wx.ACCEL_CTRL, ord('S'), 'save')
accelerators[1].Set(wx.ACCEL_CTRL, ord('E'), 'export')
accel=wx.AcceleratorTable(accelerators)
self.SetAcceleratorTable(accel)
def save(self, event):
# some code...
def export(self, event):
# some other code...
我还尝试将ID设置为与我为工具栏工具设置的ID相同的ID,但是它说'id'在这里无效。
非常感谢您的所有建议。[R
编辑
所有人都想知道可能是什么问题,所以我还使用了wx.EVT_CHAR_HOOK来检测“ DEL”键。当我第二次重写我的课程时,我忘记添加EVT_CHAR_HOOK,它可以正常工作。直到我将EVT_CHAR_HOOK添加回去。这意味着您不能同时使用它。所以我接下来要做的是:
ID_SAVE = wx.NewIdRef()
ID_EXPORT = wx.NewIdRef()
ID_DELETE = wx.NewIdRef()
accelerators = [wx.AcceleratorEntry() for x in range(3)]
accelerators[0].Set(wx.ACCEL_CTRL, ord('S'), ID_SAVE)
accelerators[1].Set(wx.ACCEL_CTRL, ord('E'), ID_EXPORT)
accelerators[2].Set(wx.ACCEL_NORMAL, wx.WXK_DELETE, ID_DELETE)
还要分配我的删除按钮,它现在可以工作
一如既往,罗宾的回答确实有效。
您可能希望检查一下如何实现它。
尝试这样的事情:
import wx
ID_SAVE = wx.NewIdRef()
ID_EXPORT = wx.NewIdRef()
accelerators = [wx.AcceleratorEntry() for x in range(2)]
accelerators[0].Set(wx.ACCEL_CTRL, ord('S'), ID_SAVE)
accelerators[1].Set(wx.ACCEL_CTRL, ord('E'), ID_EXPORT)
class MyFrame(wx.Frame):
def __init__(self, parent, id=wx.ID_ANY, title="", size=(360,100)):
super(MyFrame, self).__init__(parent, id, title, size)
accel=wx.AcceleratorTable(accelerators)
self.SetAcceleratorTable(accel)
self.panel = wx.Panel(self)
self.Bind(wx.EVT_MENU, self.OnSave, id=ID_SAVE)
self.Bind(wx.EVT_MENU, self.OnExport, id=ID_EXPORT)
self.Show()
def OnSave(self, event):
print("Save")
event.Skip()
def OnExport(self, event):
print("Export")
event.Skip()
if __name__ == "__main__":
app = wx.App()
frame = MyFrame(None,title="An Accelerator Test")
app.MainLoop()
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句