python-3.x - Tkinter 不断崩溃:在循环中更新标签 (StringVar())
问题描述
我在创建可自行更新的标签时遇到问题。while
使用循环后,我的 Tkinter 窗口崩溃。就我而言,我不会创建多个标签并将它们堆叠在一起,这会导致程序崩溃而不是更新标签。我能做些什么更好?先感谢您!!
带循环:
def testfunction():
while True :
f = open("exchange.txt", "r")
insert = f.read()
f.close()
if insert != var:
var.set(insert)
root = Tk()
var = StringVar()
var.set("start")
root.geometry("1920x150+-10+-35")
frame_main = Frame(root, bg="black")
frame_main.place(relwidth=1, relheight=1, relx=0, rely=0)
label = Label(root,width=10,textvariable=var, font='Helvetica 14 bold',bg="black", fg="yellow")
label.place(relwidth=0.9, relheight=0.9, relx=0.05, rely=0.1)
root.after(200, testfunction)
root.mainloop()
重要编辑: 当我通过这个脚本打开它时,这一切都发生了。
# writes down:
subprocess.Popen("python -i tkinter_samentha_tricks.py")
while True:
r = random.randint(1,6)
f = open("exchange.txt", "w+")
if r==1 or r==2:
f.write("1 or 2")
f.close
print(r)
解决方案
使用 while 循环将阻止 tkinter 更新小部件,请after()
改用:
def testfunction():
try:
with open("exchange.txt", "r") as f:
insert = f.read()
if insert != var.get():
var.set(insert)
except FileNotFoundError:
#print('file not found')
pass
root.after(100, testfunction)
推荐阅读
- clojure - Clojure 垃圾邮件过滤器
- arrays - 不能在没有交叉和超出范围的值的情况下对两个数组进行洗牌
- docker - Docker 运行因仲裁而失败
- vue.js - Vue是否根据步骤变量显示或隐藏步骤
- go - Golang 生产者通道作为参数或返回值
- angular - Ionic 4 / Angular 6 - 使用拦截器重定向 401/403 上的登录页面
- litho - Facebook Litho:片段恢复时未触发可见事件
- node.js - 启动/升级作曲家网络中的问题:意外的令牌常量
- java - MacOS Eclipse IDE 运行具有旧 Java 版本的应用程序
- c# - C# Post,Webrequest 循环不工作,循环 i = 2 然后没有结果