我已經設置了一個窗口來註冊鼠標運動。如果沒有其他窗口打開,這很有效。當我將鼠標移動到窗口外時,Motion事件自然會停止滾動,並且當我將鼠標懸停在窗口上時將繼續註冊。Tkinter窗口在懸停其他窗口後停止註冊運動事件
但是,當我將光標懸停在Tkinter窗口和其他窗口之外時,Tkinter窗口將不會註冊任何Motion事件。我錯過了一些重要的細節,還是它是一個錯誤?如果它是一個錯誤,是否有一個已知的解決方法?
import Tkinter as tk
class CursorWindow(tk.Frame):
def __init__(self, width=640, height=400):
self.root = tk.Tk()
self.root.title('Sample application')
self.root.minsize(width, height)
self.root.maxsize(width, height)
tk.Frame.__init__(self, self.root, width=width, height=height, background='black')
self.pack()
self.bind("<Motion>", self.cb)
def cb(self, event):
print "%d, %d" % (event.x, event.y)
w = CursorWindow()
w.mainloop()
這是OSX 10.8.3,Python的2.7.2
編輯:的解決方法,在這個簡單的例子,是迫使幀搶集中無論鼠標的位置(就像它是一個按下按鈕+運動事件)與Frame.grab_set()。這樣,只要窗口處於活動狀態,窗口就不會停止傳遞事件。就我而言,這仍然是一個骯髒的伎倆,如果任何人有任何其他建議,請讓我知道。
你可以嘗試綁定''看看你是否得到這個事件?如果你沒有得到'',Tk不會知道你的窗口是應該得到''事件的窗口,所以這就是我們必須追蹤的。如果你得到''但仍然沒有得到'',這是不同的。 –
abarnert
另外,請注意,儘管Tk文檔'',Tkinter沒有,並且Effbot文檔(和O'Reilly書)專門說沒有這樣的事件。 ([Shipman's Tkinter reference](http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/event-types.html)特別列出了''),但它可能是一個標誌,人們沒有太多使用它,並沒有注意到錯誤... –
abarnert
如果它在tk文檔中記錄(它是),那麼它幾乎肯定是由Tkinter支持的。如果Tkinter明確禁用它,唯一的方法就是不支持它,並且沒有理由爲什麼他們會這樣做。 –