你好,我想知道是否有辦法檢查某個鍵是否被按下。檢查是否按住鍵,wxpython?
這裏的情況爲例
self.button2.Bind(wx.EVT_LEFT_DOWN, self.clickedbutton)
def clickedbutton(self, e):
if (Control is held down while the button has been clicked):
print "it works"
感謝
你好,我想知道是否有辦法檢查某個鍵是否被按下。檢查是否按住鍵,wxpython?
這裏的情況爲例
self.button2.Bind(wx.EVT_LEFT_DOWN, self.clickedbutton)
def clickedbutton(self, e):
if (Control is held down while the button has been clicked):
print "it works"
感謝
只使用問題WX這是你需要的KeyEvent訪問控制鍵的實際狀態。既然你需要在這樣的事件之外的這些信息,你需要手動跟蹤它,並且問題在於很容易錯過KeyEvent,因爲只有集中控制才能獲得它們,並且你不能指望它們傳播。
萬無一失的方法是利用一些特定於平臺的方式來查詢這些信息,如果你在windows上查看pyHook或win32api的話。
在某些情況下,雖然僅WX方法能夠工作,這裏是你如何做到這一點:
import wx
class Example(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None)
btn = wx.Button(self, label="press me")
self.Sizer = wx.BoxSizer()
self.Sizer.Add(btn)
self.ctrl_down = False
self.Bind(wx.EVT_KEY_UP, self.OnUpdateCtrlState)
self.Bind(wx.EVT_KEY_DOWN, self.OnUpdateCtrlState)
btn.Bind(wx.EVT_KEY_UP, self.OnUpdateCtrlState)
btn.Bind(wx.EVT_KEY_DOWN, self.OnUpdateCtrlState)
btn.Bind(wx.EVT_BUTTON, self.OnButton)
def OnUpdateCtrlState(self, event):
self.ctrl_down = event.ControlDown()
print self.ctrl_down
event.Skip()
def OnButton(self, event):
if self.ctrl_down:
wx.MessageBox("control down")
app = wx.App(False)
app.TopWindow = f = Example()
f.Show()
app.MainLoop()
啊我明白了,謝謝你我的朋友! – thelost 2011-12-28 13:49:27
self.button2.Bind(wx.EVT_LEFT_DOWN, self.clickedbutton)
def clickedbutton(self, e):
if wx.GetKeyState(wx.WXK_CONTROL):
print "it works"
這適用於我正在構建的wx應用程序,並且看起來正確。我不禁想知道這是否被忽視(你的解決方案比直接接受的答案更直接,更容易獲取),或者在某些地方存在某些限制,將其排除在正確的答案之外。我投了票,並打算做一些測試/研究。 – 2013-01-08 07:14:58
@ g.d.d.c嘿,謝謝你,這種方法很好。我回答時已經接受了另一個答案,這就是爲什麼。儘管測試儘管/研究雖然,總是一個好主意:) – GP89 2013-01-08 22:27:55
@gddc好吧,剛剛檢查了[文檔](http://wxpython.org/docs/api/wx-module.html#GetKeyState)_獲取狀態一個鍵(如果按下或切換則爲真,否則爲假)。這通常是最有用的獲取修飾鍵或切換鍵的狀態。 **在某些平臺上,這些函數可能是唯一可以檢測到的鍵** ._我不知道它指的是哪個平臺,但Ctrl,Alt等鍵(修飾鍵)應該工作得很好,對此。如果您使用它檢測常規密鑰,我想要小心一點。 – GP89 2013-01-08 22:34:08
我建議重讀一些答案。除非我錯過了一些東西,否則接受的其中一個更清潔,更便攜,並在我的早期測試中工作。 – 2013-01-08 07:16:40