2015-05-13 4 views
0

Я нашел этот пример кода здесь, в stackoverflow, и я хотел бы закрыть первое окно при открытии нового. Так что мне хотелось бы, чтобы при открытии нового окна главное было закрыто автоматически.Закрыть главное окно после открытия нового

#!/usr/bin/env python 
import Tkinter as tk 

from Tkinter import * 

class windowclass(): 

     def __init__(self,master): 
       self.master = master 
       self.frame = tk.Frame(master) 
       self.lbl = Label(master , text = "Label") 
       self.lbl.pack() 
       self.btn = Button(master , text = "Button" , command = self.command) 
       self.btn.pack() 
       self.frame.pack() 

     def command(self): 
       print 'Button is pressed!' 

       self.newWindow = tk.Toplevel(self.master) 
       self.app = windowclass1(self.newWindow) 

class windowclass1(): 

     def __init__(self , master): 
       self.master = master 
       self.frame = tk.Frame(master) 
       master.title("a") 
       self.quitButton = tk.Button(self.frame, text = 'Quit', width = 25 , command = self.close_window) 
       self.quitButton.pack() 
       self.frame.pack() 


     def close_window(self): 
       self.master.destroy() 


root = Tk() 

root.title("window") 

root.geometry("350x50") 

cls = windowclass(root) 

root.mainloop() 

ответ

0

Вы бы вывести главное окно, но у вас нет никакого способа, чтобы закрыть программу после нажатия кнопки в верхнем уровне, когда главное окно все еще открыто, но не показывает также выбрать один или другой из (но не оба)

import Tkinter as tk 

from Tkinter import * 

Это открывает 2-ую TopLevel, которая позволяет выйти из программы

import Tkinter as tk 

class windowclass(): 

     def __init__(self,master): 
       self.master = master 
       ##self.frame = tk.Frame(master) not used 
       self.lbl = tk.Label(master , text = "Label") 
       self.lbl.pack() 
       self.btn = tk.Button(master , text = "Button" , command = self.command) 
       self.btn.pack() 
       ##self.frame.pack() not used 

     def command(self): 
       print 'Button is pressed!' 

       self.master.withdraw() 
       toplevel=tk.Toplevel(self.master) 
       tk.Button(toplevel, text="Exit the program", 
          command=self.master.quit).pack() 
       self.newWindow = tk.Toplevel(self.master) 
       self.app = windowclass1(self.newWindow) 

class windowclass1(): 

     def __init__(self , master): 
       """ note that "master" here refers to the TopLevel 
       """ 
       self.master = master 
       self.frame = tk.Frame(master) 
       master.title("a") 
       self.quitButton = tk.Button(self.frame, 
            text = 'Quit this TopLevel', 
            width = 25 , command = self.close_window) 
       self.quitButton.pack() 
       self.frame.pack() 

     def close_window(self): 
       self.master.destroy() ## closes this TopLevel only 

root = tk.Tk() 

root.title("window") 

root.geometry("350x50") 

cls = windowclass(root) 
root.mainloop() 
+0

Может быть близко не правильное слово, но, возможно, это скрывать? а затем есть возможность показать его снова? –

+0

Для этого потребуется что-то вроде кнопки, которая будет деионифицировать главное окно, например, кнопку выхода в примере выше. http://effbot.org/tkinterbook/wm.htm –

0

в коде:

self.newWindow = tk.Toplevel(self.master) 

Вы не создаете новое окно независимого полностью из корневой (или master), а дитя TopLevel (master в вашем случае), это, конечно, новый child верхнего уровня будет действовать независимо от master до тех пор, master получает detroyed где child верхнего уровня будет уничтожен, а также,

Чтобы сделать это совершенно отдельным, создать новый экземпляр объекта Tk и он закрывает окно windowclass (уничтожить его объект):

self.newWindow = Tk() 

у вас есть два варианта здесь:

1 - Либо вы должны указать в windowclass1.close_window(), что вы хотите, чтобы уничтожить cls объект при создании windowclass1() объекта, таким образом:

def close_window(self): 
       cls.master.destroy() 

2 - Что является предпочтительным для общности, чтобы уничтожить cls после создания windowclass1 объекта в методе windowclass.command(), как это:

def command(self): 
       print 'Button is pressed!' 
       self.newWindow = Tk() 
       self.app = windowclass1(self.newWindow) 
       self.master.destroy() 

и сделать quitButton в __init__() из windowclass1, как это:

self.quitButton = tk.Button(self.frame, text = 'Quit', width = 25, command = self.master.quit) 

бросить полностью программа