Seite 1 von 1
Re: Automatische erstellung von mehreren Buttons?
Verfasst: Mittwoch 8. August 2012, 22:09
von wuf
OK deets
Wie würdest du mein Code-Snippet abändern, dass es ohne StringVar das genau gleiche macht. Die Bezeichnung Observable ist neu für mich. Verstehe ich nicht. Danke für deine Bemühung.
Gruß wuf

Re: Automatische erstellung von mehreren Buttons?
Verfasst: Mittwoch 8. August 2012, 22:38
von deets
Code: Alles auswählen
from functools import partial
import Tkinter as tk
def button_callback(button_text):
if button_text == 'c':
buttons[0]["text"] = 'Button-2'
button_names = ['a','b','c']
buttons = list()
root = tk.Tk()
for button_name in button_names:
button = tk.Button(root, text=button_name,
command=partial(button_callback, button_name))
button.pack(fill='x')
buttons.append(button)
buttons[0]['text'] = 'Button-1'
root.mainloop()
Ein Observable ist ein Wert, der Nachrichten verschickt, wenn er veraendert wird. Das ist genau das, was eine StringVar und Co. sind.
Der Punkt den ich machen wollte: fuer deinen illustrierten Zweck kommt man ohne extra Komplexitaet aus. Aber natuerlich sind observables sehr hilfreich: wenn man zb ein Datenmodell hat, das sich durch irgendwas anderes aendert, und dadurch dann *automatisch* die GUI upgedated wird.
Re: Automatische erstellung von mehreren Buttons?
Verfasst: Mittwoch 8. August 2012, 22:55
von wuf
@deets
Super! Besten Dank für deine hilfreiche Antwort mit Erklärung. Man hat eben nie ausgelernt. Dein modifizierte Code-Snippet verhält sich genau gleich wie mein aufgeblähtes Snippet.
Gruß

Noch eine gute Nacht.
Re: Automatische erstellung von mehreren Buttons?
Verfasst: Donnerstag 9. August 2012, 11:37
von Arp
@deets
Ich hab meinen Fehler gefunden. Ich hatte bei mir in der callback funktion blöderweise die laufvariable, und nicht die übergebene ausgegeben, daher hab ich natürlich immer nur den letzten Wert ausgegeben. Funktioniert jetzt. Danke!
Re: Automatische erstellung von mehreren Buttons?
Verfasst: Donnerstag 9. August 2012, 13:22
von wuf
Hi deets
Habe doch noch einen kleinen Unterschied zwischen meinem und dem modifizierten Snippet festgestellt. Bei meine Snippet ist auch der Name eines modifizierten Button verfügbar. Aber aufbauend auf dem modifizierten Snippet ist dies auch ohne den Einsatz von StringVar() realisierbar. Hier noch eine Anpassung des modifizierten Snippet um dieses Verhalten zu erzielen:
Code: Alles auswählen
from functools import partial
import Tkinter as tk
def button_callback(button_obj):
if button_obj['text'] == 'c':
buttons[0]["text"] = 'Button-2'
print button_obj['text']
button_names = ['a','b','c']
buttons = list()
root = tk.Tk()
for button_name in button_names:
button = tk.Button(root, text=button_name)
button.pack(fill='x')
button.config(command=partial(button_callback, button))
buttons.append(button)
buttons[0]['text'] = 'Button-1'
root.mainloop()
Gruß wuf
