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