Aufeinander aufbauende Buttons

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Whatgewesen
User
Beiträge: 12
Registriert: Freitag 24. August 2018, 12:15

Guten Abend zusammen!

Ich habe einen kleinen Code geschrieben:

Code: Alles auswählen

import tkinter
import tkinter.messagebox

class Oberfläche(tkinter.Frame):
	def __init__(self, master=None):
		tkinter.Frame.__init__(self, master)
		self.pack()
		
	# Ersten Button erstellen
		self.mach_was = tkinter.Button(self, text="Glückwunsch", command=self.los)
		self.mach_was.pack()
		
	# Zweiten Button erstellen
		self.beenden = tkinter.Button(self, text="beenden", command=self.close_window)
		self.beenden.pack()
		
	# Ersten Button zuweisen
	def los(self):
		tkinter.messagebox.showinfo("Eine Info-Box", "Habe etwas gemacht!")

	# Zweiten Button zuweisen
	def close_window(self):
		root.destroy()
		
root = tkinter.Tk()

root.title("Ein Programm")
root.minsize(width = 300, height = 100)

oberfläche = Oberfläche(master=root)

oberfläche.mainloop()
	
Nun würde mich es interessieren, wie es funktioniert z.B. einen Button zu basteln, welcher folgt, wenn ich den zweiten, dritten usw. (also aufeinanderfolgende Buttons) drücke. Meine Idee war es, bei der Zuweisung eine neue Funktion anzugeben, doch dann komme ich irgendwie in eine Endlosschleife.

Vielen Dank und Beste Grüße
Whatgewesen
Benutzeravatar
noisefloor
User
Beiträge: 4187
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

also Button 2 soll erst erscheinen, wenn Button 1 gedrückt wurde und sonst unsichtbar sein?

Gruß, noisefloor
Benutzeravatar
__blackjack__
User
Beiträge: 14033
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Whatgewesen: Also mir ist die Frage auch nicht klar. Kannst Du die noch mal präzisieren oder anders beschreiben?

Die `Oberfläche` sollte sich übrigends nicht selbst anordnen. Das macht kein anderes vorhandendenes Widget, weil man dem Aufrufer damit die Flexibilität nimmt, das Widget beliebig in einem Containerwidget anzuordnen.

Namen die Tätigkeiten beschreiben sind für Funktionen und Methoden. Die Namen für die Schaltflächen sind also nicht gut. Stell Dir vor es ist kein Beispiel mehr und `mach_was` bekommt einen passenderen Namen — wie nennst Du dann die Methode dazu wenn die Schaltfläche schon nach der Tätigkeit benannt ist?

`close_window()` sollte nicht auf `root` zugreifen können weil das nicht als Argument in die Methode herein kommt, sondern einfach ”magisch” aus der Umgebung genommen wird. Wenn das Programm grösser wird und man die Oberfläche in ein eigenes Modul auslagern möchte, dann bekommt man beispielsweise Probleme. Und wenn man Namen im Hauptprogramm ändert, sollte das nicht an beliebiger anderer Stelle im Programm Fehler verursachen.

Auf `root` könnte dort auch gar nicht zugegriffen werden, wenn das Hauptprogramm wie üblich in einer Funktion stehen würde.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Antworten