Hi,
Auch wenn ich mittlerweile einigen auf den Geist gehe,
ich habe schon wieder ein kleines Problem, das sicher ganz einfach zu lösen ist.
Ich habe ein ttk.Scale mit einem command, welches aber den Value der Scale
ändern soll. Grund ist das es keine resolution in ttk für die Scale gibt, und ich den wert immer
Runden möchte.
Denau genommen funktioniert das auch ganz gut Problem ist nur das die .set() - Methode
immer wieder das command aufruft und somit einen rekursiven aufruf erzeugt.
Also wie kann ich die Rekursion verhindern bzw. den Value anders setzen oder
gibt es schon eine amdere möglichkeit eine resolution in ttk.Scale zusetzen ?
Wie immer danke schon mal im vorraus
Problem mit ttk.Scale set()
@Xynon1: Vielleicht gibt's einen besseren Weg, aber kannst Du in Deiner `set()`-Methode nicht Testen ob der Wert schon gerundet ist, und ihn nur dann ändern, wenn das nicht der Fall ist? Das sollte die Endlosrekursion doch eigentlich verhindern.
Nimm doch das "Scale" von tk und nicht von ttk (Python 3.1).
Da funktioniert das:
Weshalb "ttk.Scale" keine 'resolution' kennt, weiss ich allerdings auch nicht.
yipyip
Da funktioniert das:
Code: Alles auswählen
import tkinter as tk
def show(slider):
print(slider.get())
root = tk.Tk()
slider = tk.Scale(root, from_=-5, to=13, length=200, orient='horizontal', resolution=0.4)
slider.config(command=lambda ev: show(slider))
slider.pack()
root.mainloop()
yipyip
ist klar aber ich hasse so eine Mischmasch der Oberflächen
entweder nimmt man ttk oder tkinter für das menü ansonsten sieht die Anwendung scheußlich aus.
Ich habe es im übrigen über eine private Variable in der Klasse gelöst frei nach folgendem Motto:
entweder nimmt man ttk oder tkinter für das menü ansonsten sieht die Anwendung scheußlich aus.
Ich habe es im übrigen über eine private Variable in der Klasse gelöst frei nach folgendem Motto:
Code: Alles auswählen
if self.__rounded:
self.__rounded = False
return
runde(value)
self.__rounded = True
scale.set(value)