【问题标题】:how to import the another tkinter python class code to open the new tkinter window?如何导入另一个 tkinter python 类代码以打开新的 tkinter 窗口?
【发布时间】:2020-07-16 07:49:12
【问题描述】:

我有两个 tkinter class1.pyclass2.py。我面临的问题是,当我在 class1.py 中导入 class2.py 时,它首先执行 class2.py 然后只执行 class1.py.

###class 1.py

import tkinter as tk 
import class2
from class2 import root2
class MyApp1(object): 

    def __init__(self, parent): 

        self.root1 = parent 

        self.root1.title("Main frame") 
 
        self.frame = tk.Frame(parent) 

        self.frame.pack() 

        btn = tk.Button(self.frame, text="Open Frame", command=) 

        btn.pack()

    def call(self):
        self.root1.withdraw()
        x = class2.MyApp2(root2)                                                              

root1 = tk.Tk()

root1.geometry("800x600")
                                                  
app = MyApp1(root1)
                                             
root1.mainloop()

###class2.py

import tkinter as tk 

class MyApp2(object): 

    def __init__(self, parent): 

        self.root2 = parent 

        self.root2.title("Main frame") 
 
        self.frame = tk.Frame(parent) 

        self.frame.pack() 

        btn = tk.Button(self.frame, text="Open Frame", command=self.openFrame) 

        btn.pack()  
                                                         
    def openFrame(self):
        pass

root2 = tk.Tk()

root2.geometry("800x600")
                                                  
#app = MyApp2(root2)
                                             
root2.mainloop()

现在我如何从 class1.py 导入 class2.py 并且结果变成 class1 tkinter 窗口然后只有 class2 tkinter 窗口?

【问题讨论】:

  • 你可以简单的把root2 = tk.Tk()到末尾的行放到一个函数中,例如show(),然后你可以在MyApp1.call()函数里面调用class2.show()

标签: python tkinter


【解决方案1】:

您不应该像这样导入代码。使代码可导入的正确方法是确保它只有函数和类定义。然后,执行导入的代码负责调用函数并实例化类。

class2.py 应该如下所示:

import tkinter as tk 

class MyApp2(object): 
    def __init__(self, parent): 
        self.root2 = parent 
        self.root2.title("Main frame") 
        self.frame = tk.Frame(parent) 
        self.frame.pack() 
        btn = tk.Button(self.frame, text="Open Frame", command=self.openFrame) 
        btn.pack()  
                                                         
    def openFrame(self):
        pass

class1.py 现在可以安全地导入此文件。然后它可以像这样创建MyApp2 的实例:

def call(self):
    self.root1.withdraw()
    new_window = tk.Toplevel()
    class2.MyApp2(new_window)                                                              

或者,如果您不再需要主窗口,您可以销毁主窗口内的所有内容,然后将其重新用于新类:

def call(self):
    for child in self.root1.winfo_children():
        child.destroy()
    class2.MyApp2(self.root1)

【讨论】:

  • 也可以用 tk.Toplevel() 代替 tk。我们要在其中导入 tkinter 窗口的 Tk()。我使用此技术解决。
猜你喜欢
  • 2018-05-11
  • 2018-05-18
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 2021-09-24
  • 2015-09-30
  • 1970-01-01
  • 2018-11-17
相关资源
最近更新 更多