正如問題所述。 Text
小部件具有<<Modified>>
事件,但不顯示Entry
小部件。如何修改Tkinter Entry小部件時獲得事件回調?
31
A
回答
50
將Tkinter StringVar添加到您的Entry小部件中。使用trace方法將您的回調綁定到StringVar。
from Tkinter import *
def callback(sv):
print sv.get()
root = Tk()
sv = StringVar()
sv.trace("w", lambda name, index, mode, sv=sv: callback(sv))
e = Entry(root, textvariable=sv)
e.pack()
root.mainloop()
8
謝謝史蒂芬! Russell Owen的Tkinter Folklore解釋瞭如何使用globalgetvar()直接從name參數(PY_VAR#)獲取StringVar值,但不知道如何將名稱映射到一個小部件。你改變回調參數的lambda方法就像魔術一樣(對我們來說,Python新手至少)。
當有多個條目時,通常不僅需要知道該值,而且知道哪些條目已更改。稍微擴展Steven的例子,下面的(Python3)傳遞一個索引,它可以用來跟蹤多個條目。
from tkinter import Tk, Frame, Label, Entry, StringVar
class fruitlist:
def entryupdate(self, sv, i):
print(sv, i, self.fruit[i], sv.get())
def __init__(self, root):
cf = Frame(root)
cf.pack()
self.sva = []
self.fruit = ("Apple", "Banana", "Cherry", "Date")
for f in self.fruit:
i = len(self.sva)
self.sva.append(StringVar())
self.sva[i].trace("w", lambda name, index, mode, var=self.sva[i], i=i:
self.entryupdate(var, i))
Label(cf, text=f).grid(column=2, row=i)
Entry(cf, width=6, textvariable=self.sva[i]).grid(column=4, row=i)
root = Tk()
root.title("EntryUpdate")
app = fruitlist(root)
root.mainloop()
6
在寫這篇文章時(2017年,3.6的Python,Tkinter的版本8.6.6)的文檔顯示,.trace
已被棄用。建議的表格現在似乎是:
sv.trace_add("write", callback)
如果您希望在變量發生變化時通知您,那麼這種方式非常有效。但是,我的應用程序只是在用戶完成編輯文本時才需要通知。我發現了「驗證」機制捎帶很好地在這裏工作:
from tkinter import *
root = Tk()
sv = StringVar()
def callback():
print(sv.get())
return True
e = Entry(root, textvariable=sv, validate="focusout", validatecommand=callback)
e.grid()
e = Entry(root)
e.grid()
root.mainloop()
這將調用callback
每當錄入組件失去焦點(我加了2次進入構件,因此第一次可以真正失去焦點!)
0
我知道其他的變種。 之前,我輸入的代碼,它可以更好地解釋編碼的路徑:蘆葦這裏http://stupidpythonideas.blogspot.com/2013/12/tkinter-validation.html?view=classic
,並有我的代碼:
from Tkinter import *
class ttt:
def __init__(self):
self.str1 = StringVar()
self.e1 = Entry(root, textvariable=self.str1)
self.str1.trace('w', self.callback_1)
self.e1.pack()
self.str2 = StringVar()
self.e2 = Entry(root, textvariable=self.str2, state='readonly')
self.e2.pack()
self.str3 = StringVar()
self.e3 = Entry(root, textvariable=self.str3, state='readonly')
self.e3.pack()
bt = Button(root, text = 'ещё', command = self.callback_2)
bt.pack()
def callback_1(self, name='', index='', mode=''):
tmp = self.str1.get()
if tmp:
self.str2.set(int(tmp) * 6)
print self.str2.get()
def callback_2(self, name='', index='', mode=''):
tmp = self.str1.get()
if tmp:
self.str3.set(int(tmp) * 6)
print self.str3.get()
root = Tk()
t = ttt()
root.mainloop()
有2株:只需按下按鈕,和進入條目。 現在你可以選擇任何變種
相關問題
- 1. 獲取Tkinter Entry小部件的內容
- 2. 如何覆蓋tkinter基礎小部件事件回調?
- 3. 如何在tkinter Entry小部件中插入臨時文本?
- 4. Tkinter事件小部件
- 5. 事件的回調窗口小部件
- 6. grid_remove在一個Entry小部件
- 7. Python tkinter小部件在更改時調整大小
- 8. 如何將tkinter OptionMenu&Entry小部件的內容保存到文件中?
- 9. Python 3 Tkinter:NameError with Entry小部件:名稱'Entry'未定義
- 10. 如何停止Tkinter文本小部件在字體更改時調整大小?
- 11. 如何獲得tkinter小部件的寬度?
- 12. 在Tkinter Entry小部件中動畫文本
- 13. 無法使用tkinter創建Entry小部件
- 14. 使Tkinter Entry小部件只讀但可選
- 15. 獲取觸發事件的小部件?
- 16. 如何在tkinter中存儲循環中的Entry小部件的值?
- 17. 如何以像素爲單位設置Tkinter Entry小部件的寬度?
- 18. 如何清除tkinter中來自Entry小部件的以前輸入?
- 19. 從Tkinter的Entry小部件中獲取輸入文本並使用它
- 20. 調整窗口大小時調整Tkinter Listbox小部件
- 21. 如何將小部件放置在Tkinter的Canvas小部件中?
- 22. TreeViewColumn標題中的PyGTK Entry小部件
- 23. tkinter gui微調小部件佈局
- 24. 如何修改Tkinter Text小部件中的當前選擇長度?
- 25. Python tkinter文本修改回調
- 26. Tkinter的回調之後修改
- 27. 爲kendo小部件事件設置回調函數
- 28. 如何製作tkinter入口小部件?
- 29. Tkinter中的小部件如何更新?
- 30. Python,Tkinter。如何檢查小部件ttk.CheckButton?
完美,謝謝! – bfops
您的解決方案似乎不適用於'self'組件。 – Nicholas
@Nicholas:代碼示例按原樣運行。你找不到什麼? –