Python tkinter 2帧合并在一起

时间:2017-12-14 10:00:21

标签: python tkinter

嘿伙计们,我必须创建一个框架。第一个包含一个应该关闭其框架的按钮。第二帧只包含一个Label。我的代码应首先使用按钮创建框架,当按下按钮时,应显示第二个窗口。会发生什么,当按下按钮时,"合并"创建包含按钮和标签的窗口。

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

button images

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

tk.Frame.destroy(self)

但这对任何一方都没有帮助。

编辑:我通过从tk.TK而不是tk.Frame继承类来解决它

1 个答案:

答案 0 :(得分:1)

Frame不创建窗口 - 它只是组元素。 Tk()创建窗口。

要关闭窗口,您必须destroy()创建Tk()对象。但是你不是手动创建它root = tk.Tk()所以tkinter会自动创建它,但你无法访问此root来关闭它。

如果窗口小部件没有父级,则它使用root,而您的Frame也会使用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()

  <div class="form-group">
      <input type="text"........../>
 </div>