【发布时间】:2020-07-19 17:13:02
【问题描述】:
我制作了一个脚本,该脚本使用 while True 循环根据我不断收到的 UDP 数据包不断更新一系列变量。我想最终创建一个显示该数据并不断更新屏幕的 GUI,我打算用 tkinter 来做这件事(在一个函数中使用 my_label.after 然后调用自身,不确定这是否是一个好计划)。
这是一些我无法正常工作的测试脚本:
GUI2.py(我的测试循环脚本)
import time
var = 0
while True:
var += 1
time.sleep(0.1)
GUI Testing.py(将访问这些变量的脚本)
from GUI2 import *
import time
print('never')
print(var)
time.sleep(1)
我认为第二个脚本永远不会到达 print('never') 行,因为它卡在另一个脚本的 while True 循环中并且永远不会返回。
我应该怎么做?我有一个脚本,我希望在一个恒定循环中根据传入的数据包将我的变量更新为正确的值,然后另一个脚本更新一个 tkinter 窗口。我这样做是因为我可以找到使用 Tkinter 的大多数示例都没有使用任何类型的 while True 循环。我可以将我的数据包接收代码放在 Tkinter 主循环中吗?这样会有效地充当 while True 吗?
EDIT(添加了我无法工作的 Tkinter 循环):
这会打开一个 Tkinter 窗口,但标签保持在 99,然后当我用新的 x 值(即 98、97 等)关闭它时重新打开一个窗口。我希望标签每秒更新一次。
import tkinter as tk
import time
x = 99
while True:
root = tk.Tk()
label = tk.Label(root, text=x)
label.pack()
x -= 1
time.sleep(1)
root.mainloop()
【问题讨论】:
-
陷入无限循环的 IMO 得分为 10,评分为 0-10 的不良进口副作用。您应该使用
if __name__ == "__main__":成语。 (这只是一个评论,它并不能解决你的问题)
标签: python loops variables tkinter