独立运行两个Tk()主循环的正确方法,第二个从第一个脚本开始



script_a.py

from tkinter import *
from script_b import test
root = Tk()
var1 = stuff
var2 = stuff
def start_scriptb():
test([var1, var2])
Button(root, text="Start", 
command=start_scriptb)

root.mainloop()

script_b.py

from tkinter import *

def test(x):
main = Tk()
Label(main, text=x)
Button(main, text="Exit", command=main.destroy())
main.mainloop() 

这是我努力实现的一个非常基本的版本。实际上,我正在生成一个使用子流程的进度窗口。在脚本2中弹出来自脚本一的传递变量,并通过第二个程序上的滚动文本小部件查看进度。我正在尝试生成一个新的进程,每次从script_a点击该按钮时都独立于根GUI。

到目前为止,它在我的测试中运行良好,但我想看看这是否会导致任何问题,或者这是否真的会产生两个过程?

我知道每个进程应该只有一个Tk()

使用TopLevel()窗口来显示进度与线程模块配合良好,但如果root正在进行任何需要任何时间长度的处理,则TopLevel()窗口和root(以及任何其他打开的TopLevel())都将冻结。

经过数小时的测试,我确实成功地运行了两个Tk()循环,但它可能会出现问题,因为"Bryan Oakley";已经在许多帖子中发布了。

最终,我决定,当我需要单独运行某个东西时,我会用参数启动GUI,并在一个全新的过程中处理它,而不是直接传递任何参数。看起来是一个更安全的选择。

最新更新