So, in dem ersten der drei Links habe ich jetzt also erstmal 1. gelesen das eine App möglichst nur ein Fenster haben sollte, ups, und 2. eine Idee bekommen wie ich das mit Klassen mache. Und siehe da, mit self wird global überflüssig
.
Jetzt hab ich das Ganze also mit einer Klasse und über Frames gelöst, das hier ist jetzt mal ein 2 frame-iges Progrämmchen:
Code: Alles auswählen
#!/usr/bin/python
# -*- coding: cp1252 -*-
#Module importieren
import tkinter as tk
#Klasse definieren
class App:
#root/master initialisieren
def __init__(self):
self.master = tk.Tk()
self.master.protocol("WM_DELETE_WINDOW", self.quit_app)
self.master.title("Frames")
self.set_main_frame()
#Hauptfenster starten
def set_main_frame(self):
#Hauptframe definieren
self.main_frame = tk.Frame(self.master)
self.main_frame.pack()
#Widgets initialisieren
self.hallo_label = tk.Label(self.main_frame, text = "Hallo Tkinter!")
self.quit_button = tk.Button(self.main_frame, text = "beenden", command = self.quit_app)
self.hallo_button = tk.Button(self.main_frame, text = "Weiter", command = self.set_settings_frame)
#Widgets positionieren
self.hallo_label.grid(row = 0, column = 0)
self.quit_button.grid(row = 0, column = 1)
self.hallo_button.grid(row = 0, column = 2)
#Bestätigung in der Konsole
print("Hauptfenster geöffnet")
#Fenster neustarten
self.master.mainloop()
#Einsellungsfenster starten
def set_settings_frame(self):
#Einstellungsframe definieren
self.settings_frame = tk.Frame(self.master)
#Hauptframe schließen
self.main_frame.destroy()
self.settings_frame.pack()
#Widgets initialisieren
self.head_label = tk.Label(self.settings_frame, text = "Einstellungen")
self.setting1_label = tk.Label(self.settings_frame, text = "Einstellung 1")
self.setting1_entry = tk.Entry(self.settings_frame)
self.setting2_label = tk.Label(self.settings_frame, text = "Einstellung 2")
self.setting2_entry = tk.Entry(self.settings_frame)
self.safe_settings_button = tk.Button(self.settings_frame, text = "Speichern", command = self.safe_settings)
#Widgets positionieren
self.head_label.grid(row = 0, column = 0, columnspan = 2)
self.setting1_label.grid(row = 1, column = 0)
self.setting1_entry.grid(row = 1, column = 1)
self.setting2_label.grid(row = 2, column = 0)
self.setting2_entry.grid(row = 2, column = 1)
self.safe_settings_button.grid(row = 3, column = 0, columnspan = 2)
#Bestätigung in der Konsole
print("Einstellungen geöffnet")
#Fenster neustarten
self.master.mainloop()
#Einstellungen verwerten und zum Hauptfenster zurückkehren
def safe_settings(self):
#Einstellungen auslesen
self.settings = [self.setting1_entry.get(), self.setting2_entry.get()]
###Einstellungen verwerten####
for setting in self.settings:#
print(setting) #
##############################
#Einstellungsframe schließen
self.settings_frame.destroy()
#Hauptframe starten
self.set_main_frame()
def quit_app(self):
print("Programm beendet")
self.master.destroy()
#App ausführen (Instanz der Klasse App erstellen)
app = App()
Das ist ja sicherlich schon besser als vorher, aber ist das die beste und korekteste Lösung?
Vielen Dank im Voraus,
Gruß