import wx
class Control(wx.Control):
def __init__(self, parent):
wx.Control.__init__(self, parent)
self.Bind(wx.EVT_CHAR, self.OnKey)
self.Bind(wx.EVT_KEY_DOWN, self.OnKey)
self.Bind(wx.EVT_KEY_DOWN, self.OnKey)
self.Bind(wx.EVT_LEFT_DOWN, self.OnMouseClick)
def OnKey(self, event):
print("key pressed")
event.Skip()
def OnMouseClick(self, event):
self.SetFocus()
print("has focus")
event.Skip()
class Frame(wx.Frame):
def __init__(self, parent=None):
wx.Frame.__init__(self, parent)
panel = wx.Panel(self)
sizer = wx.BoxSizer(wx.HORIZONTAL)
radio = wx.RadioButton(panel, label="Radio button")
button = wx.Button(panel, label="Button")
control = Control(panel)
sizer.Add(radio, 0, wx.ALL, 5)
sizer.Add(button, 0, wx.ALL, 5)
sizer.Add(control, 0, wx.ALL, 5)
panel.SetSizer(sizer)
self.Show()
if __name__ == "__main__":
app = wx.App()
frame = Frame()
app.MainLoop()
一个非常简单的例子。wxPython - 如何阻止wx.Control失去焦点在箭头键按?
通过点击控件,设置焦点来控制。但是,即使将按键绑定到一个函数OnKey,按下方向键将焦点更改为另一个按钮/小部件。
有没有一种方法类似AcceptsFocusFromKeyboard(个体经营):
说明:可以在该窗口通过键盘导航给予重点是什么?如果不是的话,唯一让它专注的方法就是点击它。
除此之外,
对不起,我没有测试event.Skip(),但我没有把它从例子中排除掉。我希望它能够专注于控件,方向键可以改变控件的状态。例如,像listctrl一样,箭头键可以更改列表中的选择,而不是从listctrl中失去焦点。 – Blackboard
@Blackboard,答案已更新。 – Igor
谢谢,我会尝试你所提出的建议。如果你不介意我问,代码(不是指间距或命名约定等)对你来说看起来是错误还是奇怪?我已经看到了很多以这种方式构建的各种教程的代码示例。(虽然我会检查更多的代码示例) – Blackboard