如何导入另一个tkinter python类代码以打开新的tkinter窗口?
我有两个tkinterclass1.py和class2.py。我面临的问题是,当我在class1.py中导入class2.py时,它首先执行class2.py,然后只执行class1.py ###1.py类如何导入另一个tkinter python类代码以打开新的tkinter窗口?,python,tkinter,Python,Tkinter,我有两个tkinterclass1.py和class2.py。我面临的问题是,当我在class1.py中导入class2.py时,它首先执行class2.py,然后只执行class1.py ###1.py类 import tkinter as tk import class2 from class2 import root2 class MyApp1(object): def __init__(self, parent): self.root1 = parent
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()
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()
###class2.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()
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窗口?您不应该这样导入代码。使代码可导入的正确方法是确保它只有函数和类定义。然后,执行导入的代码负责调用函数和实例化类 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
def call(self):
self.root1.withdraw()
new_window = tk.Toplevel()
class2.MyApp2(new_window)
class1.py现在可以安全地导入此文件。然后它可以创建MyApp2
的实例,如下所示:
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
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)
您只需将从
root2=tk.tk()
到末尾的行放入一个函数中,例如show()
,然后您就可以在MyApp1.call()
函数中调用class2.show()
。也可以编写tk.Toplevel()而不是tk。Tk(),我们要在其中导入tkinter窗口。我使用此技术解决此问题。