Bei Widgets in einem neuen Fenster funktionieren die Optionen nicht alle.
Verfasst: Freitag 10. Januar 2020, 17:30
Hallo allerseits,
Widgets in einem Fenster zu programmieren war bisher kein Problem unter "root".
Also etwa so für 4 Spinboxen:
s0=IntVar(); s0.set(0):
s1=IntVar(); s1.set(1):
s2=IntVar(); s2.set(2):
s3=IntVar(); s3.set(3):
sn = [s0, s1, s2, s3}
for n in range(4):
spin = Spinbox(root, bd=5, width=3, from_=0, to=255, textvariable=sn[0])
spin.place(x=n*70, y=100)
Es werden also 4 Spinboxen nebeneinander erzeugt.
Sie werden nacheinander mit den Werten 1 - 4 geladen.
Über die Textvariable "sn[0]" oder "s0" kann man jederzeit beispielsweise in der
Spinbox 1 den Wert auf 100 setzen, der dann natürlich in der Spinbox ausgegeben wird.
sn[0].set(100)
--------------------------------------------------------------------------------------------------------------------------------------------
Nun habe ich ein zweites Fenster geöffnet unter "root_neu".
In diesem neuen Fenster habe ich nun auch wieder Spinboxen erstellt.
sNeu0=IntVar(); sNeu0.set(0):
sNeu1=IntVar(); sNeu1.set(1):
sNeu2=IntVar(); sNeu2.set(2):
sNeu3=IntVar(); sNeu3.set(3):
sNeu = [sNeu0, sNeu1, sNeu2, sNeu3}
for n in range(4):
spinNeu = Spinbox(root, bd=5, width=3, from_=0, to=255, textvariable=sNeu[0])
spinNeu.place(x=n*70, y=100)
In diesem neuen Fenster funktioniert der set-Mechanismus leider nicht.
D.h., ein Wert wird zwar in der Variablen gespeichert, aber in der Spinbox nicht ausgegeben:
sNeu[0].set(100)
Mit dem Befehl
lies = sNeu[0].get()
kann man sehr wohl den Spinwert auslesen und etwa mit "Message" anzeigen lassen.
Jetzt das merkwürdige: Man kann aus dem neuen Fenster heraus aber Werte in den
Spinboxen des Hauptfensters verändern, die auch ausgegeben werden.
Der Befehl in Fenster "root_neu" beispielsweise
sn[0].set(100)
setzt im Hauptfenster die erste Spinbox auf den Wert 100.
Das Widget "Spinbox" kennt keinen Optionswert "set", weshalb man also nicht
schreiben kann:
spinNeu.set(100)
Man muß einen anderen Weg gehen mit:
spinNeu.insert(0, 100)
Dies ist jedoch "ätzend", da ein "insert"-Befehl länger dauert als ein "set"-Befehl.
Ferner muß man nun jeder Befehlszeile einen Index verpassen:
spinNeu = [0, 0, 0, 0]
for n in range(4):
spinNeu[n] = Spinbox(root, bd=5, width=3, from_=0, to=255, textvariable=sNeu[0])
spinNeu[n].place(x=n*70, y=100)
Wer kann mir helfen? Woran liegt das?
Gruß, Theodor
Widgets in einem Fenster zu programmieren war bisher kein Problem unter "root".
Also etwa so für 4 Spinboxen:
s0=IntVar(); s0.set(0):
s1=IntVar(); s1.set(1):
s2=IntVar(); s2.set(2):
s3=IntVar(); s3.set(3):
sn = [s0, s1, s2, s3}
for n in range(4):
spin = Spinbox(root, bd=5, width=3, from_=0, to=255, textvariable=sn[0])
spin.place(x=n*70, y=100)
Es werden also 4 Spinboxen nebeneinander erzeugt.
Sie werden nacheinander mit den Werten 1 - 4 geladen.
Über die Textvariable "sn[0]" oder "s0" kann man jederzeit beispielsweise in der
Spinbox 1 den Wert auf 100 setzen, der dann natürlich in der Spinbox ausgegeben wird.
sn[0].set(100)
--------------------------------------------------------------------------------------------------------------------------------------------
Nun habe ich ein zweites Fenster geöffnet unter "root_neu".
In diesem neuen Fenster habe ich nun auch wieder Spinboxen erstellt.
sNeu0=IntVar(); sNeu0.set(0):
sNeu1=IntVar(); sNeu1.set(1):
sNeu2=IntVar(); sNeu2.set(2):
sNeu3=IntVar(); sNeu3.set(3):
sNeu = [sNeu0, sNeu1, sNeu2, sNeu3}
for n in range(4):
spinNeu = Spinbox(root, bd=5, width=3, from_=0, to=255, textvariable=sNeu[0])
spinNeu.place(x=n*70, y=100)
In diesem neuen Fenster funktioniert der set-Mechanismus leider nicht.
D.h., ein Wert wird zwar in der Variablen gespeichert, aber in der Spinbox nicht ausgegeben:
sNeu[0].set(100)
Mit dem Befehl
lies = sNeu[0].get()
kann man sehr wohl den Spinwert auslesen und etwa mit "Message" anzeigen lassen.
Jetzt das merkwürdige: Man kann aus dem neuen Fenster heraus aber Werte in den
Spinboxen des Hauptfensters verändern, die auch ausgegeben werden.
Der Befehl in Fenster "root_neu" beispielsweise
sn[0].set(100)
setzt im Hauptfenster die erste Spinbox auf den Wert 100.
Das Widget "Spinbox" kennt keinen Optionswert "set", weshalb man also nicht
schreiben kann:
spinNeu.set(100)
Man muß einen anderen Weg gehen mit:
spinNeu.insert(0, 100)
Dies ist jedoch "ätzend", da ein "insert"-Befehl länger dauert als ein "set"-Befehl.
Ferner muß man nun jeder Befehlszeile einen Index verpassen:
spinNeu = [0, 0, 0, 0]
for n in range(4):
spinNeu[n] = Spinbox(root, bd=5, width=3, from_=0, to=255, textvariable=sNeu[0])
spinNeu[n].place(x=n*70, y=100)
Wer kann mir helfen? Woran liegt das?
Gruß, Theodor