python - 如何查看插入到文本框中的不断更新的变量的变化
问题描述
所以我想创建一个文本框,让我可以显示不断更新的消息。但是,使用我下面的代码,它只显示变量 msg 中的第一条加载消息。我怎样才能解决这个问题?
import tkinter
import threading
import time
global msg
def gui():
root = tkinter.Tk()
box = tkinter.Text(width=90, height=30, font=("Lucida Console", 10))
box.pack(pady=20)
box.insert(tkinter.END, msg) #this updated msg should be shown
box.configure(state=tkinter.DISABLED)
root.mainloop()
def loop():
global msg
for x in range(100):
msg = str(x)
time.sleep(1)
if __name__ == '__main__':
p1 = threading.Thread(target=gui)
p2 = threading.Thread(target=loop)
p1.start()
p2.start()
解决方案
Text
当小部件的配置为 时,您无法更改文本disabled
。- 在您的代码中,
insert(tkinter.END, msg)
只会插入一次文本。您可以使用.after
每次插入文本。(如果您不想在 中使用 insert 方法,您可以为您的.after
绑定 a 。)StringVar
box
要解决这些问题,请尝试以下操作:
import tkinter
import threading
import time
global msg
def gui():
def insert():
global msg
box.configure(state=tkinter.NORMAL)
box.insert(tkinter.END, msg)
box.configure(state=tkinter.DISABLED)
root.after(1000, insert)
root = tkinter.Tk()
box = tkinter.Text(width=90, height=30, font=("Lucida Console", 10))
box.pack(pady=20)
insert()
root.mainloop()
def loop():
global msg
for x in range(100):
msg = str(x)
time.sleep(1)
if __name__ == '__main__':
p1 = threading.Thread(target=gui)
p2 = threading.Thread(target=loop)
p1.start()
p2.start()
我不建议您使用全局变量msg
。您可以考虑使用线程队列。
推荐阅读
- elasticsearch - Kibana Windows zip 分发解压时间太长
- javascript - getElementsByClassName 的索引未定义,但不是整个对象
- com - 本地服务器 COM 中的 IConnectionPoint 事件
- xamarin.forms - Xamarin 表单聊天实现
- python - 如何多次替换 Pandas Column 中的值?
- centos - CentOS 7 - 正确添加本地包到 yum 仓库
- c# - 从 DateTime.Now.Date 中删除尾随零
- powershell - Sitecore Powershell 报告不返回任何结果
- javascript - 如何让角度前端等待快速 REST-Call 响应
- laravel - 在 Laravel Schedule Job 中使用配置文件