Python tkinter 2帧合并在一起

Python tkinter 2帧合并在一起,python,tkinter,Python,Tkinter,嘿,伙计们,我必须学习两个都能创建框架的类。第一个包含一个按钮,用于关闭其框架。第二帧仅包含一个标签。我的代码应该首先用按钮创建框架,当按下按钮时,第二个窗口应该显示出来。当按下按钮时,会创建一个包含按钮和标签的“合并”窗口 import tkinter as tk class Window1(tk.Frame): def __init__(self): tk.Frame.__init__(self) self.grid() self.b

嘿,伙计们,我必须学习两个都能创建框架的类。第一个包含一个按钮,用于关闭其框架。第二帧仅包含一个标签。我的代码应该首先用按钮创建框架,当按下按钮时,第二个窗口应该显示出来。当按下按钮时,会创建一个包含按钮和标签的“合并”窗口

import tkinter as tk

class Window1(tk.Frame):
    def __init__(self):
        tk.Frame.__init__(self)
        self.grid()
        self.btn = tk.Button(self,text = "button",command = self.run)
        self.btn.grid(row = 0,column = 0)

    def run(self):
        tk.Frame.quit(self) 

class Window2(tk.Frame):
    def __init__(self):
        tk.Frame.__init__(self)       
        self.grid()
        self.label = tk.Label(self,text = "label ")
        self.label.grid(row = 0,column = 0)

w = Window1()
w.mainloop()

v = Window2()
v.mainloop()

第一张图片在你按下按钮之前,下一张图片在你按下按钮之后。问题似乎是
tk.Frame.quit(self)
无法正常工作。我尝试了类似的方法来关闭窗口,例如:

tk.Frame.destroy(self)
但这也没用


编辑:我通过从tk.tk而不是tk继承类解决了这个问题。Frame

Frame
不创建窗口-它只对元素进行分组<代码>Tk()创建窗口

要关闭窗口,您必须
destroy()
通过
Tk()
创建对象。但是您没有手动创建它,因此tkinter会自动创建它,但是您没有访问此
root
的权限来关闭它

若小部件并没有父项,那个么它将使用
,而您的
框架也会这样做

import tkinter as tk

class Window1(tk.Frame):

    def __init__(self, master):
        # send `root` to `Frame` as its parent
        tk.Frame.__init__(self, master) 
        # `Frame` will keep `master as `self.master` 
        # so we don't have to do `self.master = master` manually

        self.grid()
        self.btn = tk.Button(self, text="Hello Button", command=self.run)
        self.btn.grid(row=0, column=0)

    def run(self):
        # use `master` (`root`) to destroy  it
        self.master.destroy() 

class Window2(tk.Frame):

    def __init__(self, master):
        tk.Frame.__init__(self, master)       
        self.grid()
        self.label = tk.Label(self, text="Hello Label")
        self.label.grid(row=0, column=0)

root = tk.Tk()  # create main window as `root`
Window1(root)   # send `root` to `Window1` and later to `Frame`
root.mainloop()

root = tk.Tk()
Window2(root)
root.mainloop()

创建
root=tk.tk()
<代码>框架
不创建窗口-它只对元素进行分组<代码>Tk()创建窗口。若要关闭窗口,则需要
root.destroy()
。若小部件并没有父项,那个么它也会使用
root
-
Frame
。如果您不创建
根目录
,则它将在代码中的某个位置创建根目录,但您无权访问
根目录
来关闭它。另外,要关闭框架,请使用
self.destroy()
(但它不会关闭窗口)。如果你使用Python3,那么你可以使用
super()。\uu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
在Pyhton 3中,您不必使用类名,但在Python 2中,您仍然需要使用类名,这样您就可以保留旧方法:)@furas…这样您就可以保留旧方法。。。如果你改变的话,它的行为会有所不同。