【问题标题】:Python3 Tkinter - Open .py file with buttonPython3 Tkinter - 使用按钮打开 .py 文件
【发布时间】:2014-09-30 04:38:40
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: python function user-interface tkinter python-3.4


    【解决方案1】:

    好的@drsom,这应该可以,你应该在import py1 的地方使用from py1 import func1,然后在下一行使用func1()(显然这意味着你必须像我一样创建func1func2'已在下面完成),出于某种原因,这将允许您永远进行下去,我不知道为什么普通导入不会。除此之外,您必须在下一行添加(在函数之后)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()
    

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

    【讨论】:

    • 这很好用,它解决了“重新导入”的问题。它实际上只导入一次并多次运行该功能,效果很好。顺便提一下,我使用“import runpy”找到了一个更个人可以接受的解决方案,但是由于您解决了原始问题,我会认为这是已确认的答案。
    猜你喜欢
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    • 1970-01-01
    相关资源
    最近更新 更多