Piszę program, który powinien:Przykładowy kod Tkintera dla wielu okien, dlaczego przyciski nie ładują się poprawnie?
- Otwórz okno z naciśnięciem przycisku.
- Zamknij nowo otwarte okno, naciskając inny przycisk.
Używam klas, więc mogę później wstawić kod do większego programu. Nie mogę jednak poprawnie załadować przycisków.
import tkinter as tk
class Demo1(tk.Frame):
def __init__(self):
tk.Frame.__init__(self)
self.pack()
self.master.title("Demo 1")
self.button1 = tk.Button(self, text = "Button 1", width = 25,
command = self.new_window)
self.button1.grid(row = 0, column = 1, columnspan = 2, sticky = tk.W+tk.E+tk.N+tk.S)
def new_window(self):
self.newWindow = Demo2()
class Demo2(tk.Frame):
def __init__(self):
new = tk.Frame.__init__(self)
new = tk.Toplevel(self)
new.title("Demo 2")
new.button = tk.Button(text = "Button 2", width = 25,
command = self.close_window)
new.button.pack()
def close_window(self):
self.destroy()
def main():
Demo1().mainloop()
if __name__ == '__main__':
main()
@ADB to zależy. Ogólnie rzecz biorąc, uruchamiane są dwa 'mainloop()' s na dwóch oknach 'Tk()'. Jednak jeśli chcesz mieć wiele okien, możesz uniknąć dwóch "mainloop()". W ten sposób można użyć widgetu 'Toplevel()', który jest podobny do 'Tk()'. –
Dwa mainloopy nie "polegają" na niczym, a nie jest tylko "patrzy się w dół", to jest złe. Potrzebujesz tylko jednego. Wezwanie do mainloopa to nieskończona pętla, kiedy uruchamiasz więcej niż jeden, masz nieskończoną pętlę wewnątrz nieskończonej pętli. Powinieneś usunąć drugie wywołanie "mainloop" w swoim kodzie (w Demo1.new_window), w przeciwnym razie będzie to mylące dla osób, które próbują nauczyć się korzystać z Tkintera. –
Czy mógłbyś wytłumaczyć 'close_windows()'? Kiedy trzeba to nazwać? – sbhatla