我有多个想要组合的 .py tkinter GUI。我最初并没有计划将它们组合到一个 GUI 中,因此我有许多共同的变量以及全局命令,这使得将每个窗口放入一个函数中以便将其组合到一个 .py 文件下变得很困难。所以我试图看看是否可以使用按钮来单独打开应用程序来完成同样的事情。我有一个带有一些按钮的菜单,它可以工作,但是如果我关闭一个窗口并返回到菜单,我无法“重新导入”.py 文件,因此我无法进入新窗口,关闭它并返回。这是我的代码:
def newWindow():
root.destroy()
import newFile
button1 = tk.Button(root, command=newWindow)
button1.pack()
为了让问题更清楚:假设我从菜单开始。我单击一个按钮关闭菜单并打开一个新窗口,其中有一个单独的程序。我关闭了自动重新打开菜单的程序。但是,现在当我再次从菜单中打开该程序时,菜单会关闭,但该程序不会重新打开,因为它已经导入了。
最佳答案
好吧@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()
这应该可行,但如果代码要在原始函数之后继续执行,则可能会导致一些问题。我不确定您还想要什么,但请询问:),希望这对您有帮助。
关于Python3 Tkinter - 使用按钮打开 .py 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25174022/