Python3 Tkinter - 用按钮打开.py文件
我有多个用 .py 写的 tkinter 界面,想把它们合并在一起。最开始我并没有打算把它们合成一个界面,所以有很多变量是共享的,还有一些全局命令,这让把每个窗口放到一个函数里变得很困难,想在一个 .py 文件里合并它们。于是我在想,能不能让按钮打开这些应用程序,这样就能分别运行它们。我有一个菜单和一些按钮,这样是可以的,但问题是,如果我关闭了一个窗口再回到菜单,我就不能“重新导入”一个 .py 文件,所以不能打开一个新窗口,关闭它后再回到菜单。下面是我的代码:
def newWindow():
root.destroy()
import newFile
button1 = tk.Button(root, command=newWindow)
button1.pack()
为了更清楚地说明问题:假设我一开始在菜单上。我点击一个按钮关闭菜单,打开一个新的窗口,里面是一个单独的程序。我关闭那个程序后,菜单会自动重新打开。但是,现在当我从菜单再次打开这个程序时,菜单虽然关闭了,但程序却不会重新打开,因为它已经被导入过了。
1 个回答
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()
这样应该可以,但如果代码需要在原始函数之后继续运行,可能会出现一些问题。我不太确定你还想要什么,但随时问我 :),希望这对你有帮助。