我想要组合多个.py tkinter GUI。我最初没有计划将它们组合到一个GUI中,因此我有许多共同的变量以及全局命令,这使得将每个窗口放在一个函数中以便将它组合在一个.py文件下很困难。所以我试图看看我是否可以单独打开应用程序以完成相同的操作。我有一个带有一些按钮的菜单,但是如果我关闭一个窗口并返回菜单,我就不能“重新导入”.py文件,所以我无法进入新窗口,关闭它并返回。这是我的代码:
def newWindow():
root.destroy()
import newFile
button1 = tk.Button(root, command=newWindow)
button1.pack()
让问题更清晰:假设我从菜单开始。我单击一个按钮关闭菜单并打开一个新窗口,上面有一个单独的程序。我关闭了自动重新打开菜单的程序。但是,现在当我再次从菜单打开程序时,菜单关闭,但程序将不会重新打开,因为它已经被导入。
答案 0 :(得分:1)
好吧@drsom,这应该有用,你import py1
应该在下一行有from py1 import func1
然后func1()
(显然这意味着你必须创建func1
和func2
就像我在下面所做的那样,这由于某种原因会让你永远继续下去,我不知道为什么简单的进口不会。除此之外,您必须在下一行添加(在函数之后)if __name__ == '__main__':
和func2()
以便第一次运行该函数并开始循环。
一个小例子:
<强> PY1:强>
def func1():
import tkinter as tk
root1 = tk.Tk()
def kill1():
root1.destroy()
from py2 import func2
func2()
button1 = tk.Button(root1, bg = 'green', text = 'hit to kill py1 and start py2', command = kill1)
button1.pack()
root1.mainloop()
if __name__ == '__main__':
func1()
<强> PY2:强>
def func2():
import tkinter as tk
root2 = tk.Tk()
def kill2():
root2.destroy()
from py1 import func1
func1()
button2 = tk.Button(root2, bg = 'red', text = 'hit to kill py2 and start py1', command = kill2)
button2.pack()
root2.mainloop()
if __name__ == '__main__':
func2()
这应该可行,但如果代码要在原始函数之后继续执行,则可能会导致一些问题。我不确定你想要什么,但只是问:),希望这对你有所帮助。