项目上需要用到一个功能,当Entry控件中的文本发生变化时触发textchange事件,获得变化后的文本内容,找了半天后发现Entry控件没有自带的textchange事件。替代方案是:给Entry控件绑定<Key>事件,当任意敲击键盘时触发,相当于间接实现了textchange事件,但实际使用过程发现绑定<Key>事件后输出文本框内容输出的是键盘按下之前的值,举个例子,Entry控件中之前就有UCA,当我敲击S后,得到的控件内的字符串是UCA,但控件中已经显示UCAS了。文章来源:https://www.toymoban.com/news/detail-759331.html
折腾半天后,发现用线程就可以很快的实现我想要的功能,代码如下:文章来源地址https://www.toymoban.com/news/detail-759331.html
from tkinter import *
import threading
def GetValue(widgetVar):
label['text'] = widgetVar.get()
def TextChange(event, widgetVar):
if event.state == 8 or event.state == 10: # 单个键盘按下时的状态,8小写,10大写,如果是组合键是其他的值
t = threading.Thread(target=GetValue, args=(widgetVar, )) # 开启一个线程,把输入框绑定的变量对象传进去
t.start()
root = Tk()
inputText = StringVar()
entry = Entry(root, textvariable=inputText)
entry.bind('<Key>', lambda e: TextChange(e, inputText)) # 给输入框绑定键盘敲击事件,把绑定的变量传入回调函数中
entry.pack()
label = Label(root, text='这里输出文本框中的值')
label.pack()
root.mainloop()
到了这里,关于python tkinter Entry控件textchange事件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!