Python3 Tkinter-使用按钮打开.py文件

Python3 Tkinter-使用按钮打开.py文件,python,function,user-interface,tkinter,python-3.4,Python,Function,User Interface,Tkinter,Python 3.4,我有多个要合并的.py tkinter GUI。我最初并不打算将它们合并到一个GUI中,因此我有许多通用变量以及全局命令,这使得将每个窗口放入一个函数中以便将其合并到一个.py文件中变得非常困难。所以我试着看看是否可以通过按钮分别打开应用程序来完成同样的事情。我有一个带有一些按钮的菜单,它可以工作,但是如果我关闭一个窗口并返回菜单,我无法“重新导入”一个.py文件,因此我无法进入一个新窗口,关闭它并返回。这是我的密码: def newWindow(): root.destroy()

我有多个要合并的.py tkinter GUI。我最初并不打算将它们合并到一个GUI中,因此我有许多通用变量以及全局命令,这使得将每个窗口放入一个函数中以便将其合并到一个.py文件中变得非常困难。所以我试着看看是否可以通过按钮分别打开应用程序来完成同样的事情。我有一个带有一些按钮的菜单,它可以工作,但是如果我关闭一个窗口并返回菜单,我无法“重新导入”一个.py文件,因此我无法进入一个新窗口,关闭它并返回。这是我的密码:

def newWindow():
    root.destroy()
    import newFile

button1 = tk.Button(root, command=newWindow)
button1.pack()

为了让问题更清楚:假设我从菜单开始。我点击一个按钮关闭菜单,打开一个新窗口,窗口上有一个单独的程序。我关闭自动重新打开菜单的程序。但是,现在当我再次从菜单中打开程序时,菜单关闭,但程序不会重新打开,因为它已经被导入。

好的@drsom,这应该可以工作,在下一行,您应该使用
导入py1
从py1导入func1然后
func1()
(显然,这意味着你必须像我下面所做的那样创建
func1
func2
),出于某种原因,这将允许你永远进行下去,我不知道为什么普通导入不会。除此之外,你必须添加(在函数之后)如果_uuname_uu='\uu main_u':和
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()
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()
py2:

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()
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()

这应该是可行的,但如果代码要在原始函数之后继续运行,可能会导致一些问题。我不确定您还想要什么,但请询问:),希望这对您有所帮助。

这非常有效,它解决了“重新导入”的问题。实际上,它只导入一次并多次运行该函数,效果非常好。只需提一下,我发现了一个更为个人接受的解决方案,使用“导入RunPy”,但是既然你解决了原来的问题,我会考虑这个确认的答案。