2015-09-07 4 views
1

Мне было интересно, есть ли способ открыть новый экземпляр Toplevel() и закрыть текущий через нажатие кнопки, т.е. закрыть текущее окно и открыть новый. Вот код, о котором идет речь:Закрытие окна и открытие нового с помощью кнопки в Tkinter

def start(self): 
     self.name = tk.DoubleVar() 
     name_w = tk.Toplevel(root) 
     name_w.wm_title("Enter name") 
     f1 = tk.Frame(name_w) 
     f1.pack() 
     L1 = tk.Label(f1, text="Please enter your name!") 
     L1.grid(row=0, column=0) 
     E1 = tk.Entry(f1, textvariable=self.name) 
     E1.grid(row=1, column=0) 
     N1 = tk.Button(f1, text="Next", command = self.Q1) 
     N1.grid(row=2, column=0) 

В этом случае, я хочу self.Q1 называться, а также уничтожение name_w. Есть какой-либо способ сделать это? Благодарю.

+0

Вы имеете в виду, когда вы закрываете 'name_w' вы хотите' self.Q1' для называться? –

ответ

1

Да, это возможно. Чтобы закрыть экземпляр Toplevel, просто уничтожьте его. Вам нужно будет сохранить ссылку на окно. В вашем случае я бы либо Q1 уничтожить окно, либо сделать отдельную функцию, которая вызывает Q1, а затем уничтожает окно. Все зависит от того, какова основная цель Q1.

Например:

def start(self): 
    ... 
    self.new_window = name_w 
    ... 

def quit_window(self): 
    self.Q1() 
    self.new_window.destroy() 

Если у вас есть несколько из них вы, возможно, потребуется хранить ссылки окна в списке или словаре, но основной механизм тот же: использовать .destroy(), чтобы уничтожить окно.

Это, конечно, не единственный способ. Вы можете использовать lambda или functools.partial и функцию, которая принимает имя окна для уничтожения, или вы можете использовать вложенные функции и т. Д.

Смежные вопросы