2016-09-25 303 views
2

此代码打开一个按钮,链接到另一个按钮。另一个按钮可以关闭自己,但第一个按钮不能关闭并同时打开一个新的按钮,如何解决这个问题?如何关闭当前窗口并同时打开新窗口?

import tkinter as tk 

class Demo1: 
    def __init__(self, master): 
     self.master = master 
     self.frame = tk.Frame(self.master) 
     self.HelloButton = tk.Button(self.frame, text = 'Hello', width = 25, command = self.new_window,) 
     self.HelloButton.pack() 
     self.frame.pack() 
    def close_windows(self): 
     self.master.destroy() 
     self.new_window 
    def new_window(self): 
     self.new_window = tk.Toplevel(self.master) 
     self.app = Demo2(self.new_window) 


class Demo2: 
    def __init__(self, master): 
     self.master = master 
     self.frame = tk.Frame(self.master) 
     self.quitButton = tk.Button(self.frame, text = 'Quit', width = 25, command = self.close_windows) 
     self.quitButton.pack() 
     self.frame.pack() 
    def close_windows(self): 
     self.master.destroy() 

def main(): 
    root = tk.Tk() 
    app = Demo1(root) 
    root.mainloop() 

if __name__ == '__main__': 
    main() 

回答

-1

试试这个:

import tkinter as tk 

class windowclass(): 
    def __init__(self, master): 
     self.master = master 
     self.btn = tk.Button(master, text="Button", command=self.command) 
     self.btn.pack() 

    def command(self): 
     self.master.withdraw() 
     toplevel = tk.Toplevel(self.master) 
     toplevel.geometry("350x350") 
     app = Demo2(toplevel) 

class Demo2: 
    def __init__(self, master): 
     self.master = master 
     self.frame = tk.Frame(self.master) 
     self.quitButton = tk.Button(self.frame, text = 'Quit', width = 25, command = self.close_windows) 
     self.quitButton.pack() 
     self.frame.pack() 
    def close_windows(self): 
     self.master.destroy() 

root = tk.Tk() 
root.title("window") 
root.geometry("350x350") 
cls = windowclass(root) 
root.mainloop() 

或者,也许有时候,你想要做别的事情,你可以将其隐藏。

def __init__(self, parent): 
    self.root = parent 
    self.root.title("Main") 
    self.frame = Tk.Frame(parent) 
    self.frame.pack() 
    btn = Tk.Button(self.frame, text="New", command=self.openFrame) 
    btn.pack() 

def hide(self): 
    self.root.withdraw() 

def openFrame(self): 
    self.hide() 
    otherFrame = Tk.Toplevel() 
    otherFrame.geometry("400x300") 
    handler = lambda: self.CloseOtherFrame(otherFrame) 
    btn = Tk.Button(otherFrame, text="Close", command=handler) 
    btn.pack() 


def CloseOtherFrame(self, otherFrame): 
    otherFrame.destroy() 
    self.show() 
+0

底层代码不工作,试试这个。 –

+0

@BarryDoneas我更新和添加一些代码

def new_window(self): self.master.destroy() # close the current window self.master = tk.Tk() # create another Tk instance self.app = Demo2(self.master) # create Demo2 window self.master.mainloop() 
McGrady

+0

“试试这个”与一大块代码不是很有帮助。读者需要逐行比较您的代码和原始代码。如果您添加了描述重要区别的解释,您的答案会更好。 –

1

尝试重新定义Demo1.new_window()如下:

相关问题