2010-11-12 31 views
2

是否存在數據輸入窗口小部件(如Entry,Text,Spinner,Checkbutton,Radiobutton)的按值更改類型的事件?通過價值改變,我的意思是能夠檢測由於鍵盤輸入或剪切/刪除/粘貼(以及文本edit_undo/edit_redo)活動而導致小部件的值何時發生變化?我沒有看到Tkinter事件文檔[1]中描述的這種事件。窗口小部件的值事件類型事件或使用.trace_variable()技術?

將Tkinter變量鏈接到窗口小部件值的恰當方法我想監視並使用這些變量的'.trace_variable('w',...)方法綁定到值更改?這似乎是正確的方法,但我沒有看到我研究過的Tkinter應用程序源代碼中使用了很多trace_variable()...,這讓我對使用這種方法持謹慎態度。

[1] http://infohost.nmt.edu/tcc/help/pubs/tkinter/events.html

+0

我認爲Bryan Oakley對以下文章[1]的回覆回答了我的問題。 Quote:「綁定到按鍵不是正確的解決方案,例如,它不會處理粘貼鼠標的情況。此外,綁定到按鍵會在默認情況下在更新後更新小部件之前觸發發生在特定於窗口小部件的綁定之後的類綁定中,文本變量和痕跡是要走的路。「 [1] http://stackoverflow.com/questions/2524031/python-tkinter-connect-variable-to-entry-widget – Malcolm 2010-11-12 13:55:17

+0

我相信下面的鏈接證實了布賴恩的建議:http://effbot.org/tkinterbook/variable。 HTM。 – Malcolm 2010-11-12 13:57:48

回答

2

不同窗口小部件需要不同的解決方案。例如,檢查按鈕和單選按鈕有一個命令選項,並且使用條目窗口小部件可以使用內置的驗證功能。

對於可以綁定到變量的所有小部件,執行可變跟蹤是常見的解決方案。文本小部件是一個例外,因爲您無需付出很多努力就無法將其與變量相關聯。

在tcl/tk世界中,我將所有的小部件關聯到單個數組(tcl的哈希映射/字典名稱),然後將單個跟蹤放在數組上。不幸的是tkinter不直接支持tcl數組。但是,支持有點容易入侵。欲瞭解更多信息,請參閱我對此問題的回答:How to run a code whenever a Tkinter widget value changes?

+0

你的2個例子 - 我最初引用的例子和先進的tcl數組例子 - 回答了我的問題。非常感謝您在這些論壇的幫助。 – Malcolm 2010-11-12 22:45:46