Seite 1 von 1
Wie gibt tk.Scale() Wert zurück?
Verfasst: Donnerstag 22. Februar 2024, 16:43
von hubgra
Code: Alles auswählen
from tkinter import *
def sel():
return var.get()
root = Tk()
var = DoubleVar()
scale = Scale( root, from_ = -2, to = 10, variable = var )
scale.pack(anchor=CENTER)
button = Button(root, text="Get Scale Value", command=sel)
button.pack(anchor=CENTER)
c = sel() #hier passiert nichts
print(c+c)
root.mainloop()
#der Scale-Wert soll weiter verarbeitet werden, wo ist er geblieben?
Re: Wie gibt tk.Scale() Wert zurück?
Verfasst: Donnerstag 22. Februar 2024, 17:00
von hubgra
Wenn ich im Körper von sel()
print(var.get())
einfüge, erscheint eine Ausgabe auf der Konsole. So steht es in allen Beispielen. Mit der Ausgabe kann man aber nichts anfangen.
Re: Wie gibt tk.Scale() Wert zurück?
Verfasst: Donnerstag 22. Februar 2024, 17:52
von Sirius3
Man benutzt keine *-Importe. Man benutzt keine globalen Variablen, daher sollte der Code so aussehen:
Code: Alles auswählen
from functools import partial
import tkinter as tk
def sel(scale_value):
value = scale_value.get()
print(value)
def main():
root = tk.Tk()
scale_value = tk.DoubleVar(root)
scale = tk.Scale(root, from_=-2, to=10, variable=scale_value)
scale.pack(anchor=tk.CENTER)
button = tk.Button(root, text="Get Scale Value", command=partial(sel, scale_value))
button.pack(anchor=tk.CENTER)
root.mainloop()
if __name__ == "__main__":
main()
An der Stelle wo Du ›#hier passiert nichts‹ geschrieben hast, passiert natürlich was, Du fragst den Wert Deines Scale ab. Da aber zu dem Zeitpunkt der Nutzer noch gar keine Gelegenheit hatte, etwas zu tun, kommt da natürlich immer 0 raus.
Und an der Stelle wo ich ›print‹ geschrieben habe (wie es in allen Beispielen ist), mußt Du natürlich den Code schreiben, der etwas mit dem Wert tut. So arbeiten GUIs, es wird auf Ereignisse reagiert, indem die GUI Funktionen aufruft.
Re: Wie gibt tk.Scale() Wert zurück?
Verfasst: Donnerstag 22. Februar 2024, 18:12
von hubgra
Ich benutze normalerweise keine *-Importe, der Text ist aus dem Netz, modifiziert.
Aber dein Vorschlag macht doch auch nichts, als den Wert zu printen. Ich möchte ihn verabeiten.
Ich habe inzwischen einige Beispiele im Netz angesehen, Scale() wird immer nur benutzt, um Einstellungen (Farben, Fonts,...) einzustellen.
Ich möchte den Wert gern verarbeiten, dafür ist es wohl nicht gedacht.
Re: Wie gibt tk.Scale() Wert zurück?
Verfasst: Donnerstag 22. Februar 2024, 18:42
von Sirius3
Natürlich kannst Du den Wert "verarbeiten", da Du aber nicht verrätst, wie Du ihn verarbeiten willst, kann ich hier auch nur die triviale Verarbeitung "ausgeben" zeigen.
Wo hast Du bei Deiner Verarbeitung ein Problem?
Re: Wie gibt tk.Scale() Wert zurück?
Verfasst: Donnerstag 22. Februar 2024, 19:18
von hubgra
Ich möchte den Wert als Parameter an eine Funktion übergeben. Oben habe ich print(c+c) versucht.
Re: Wie gibt tk.Scale() Wert zurück?
Verfasst: Donnerstag 22. Februar 2024, 19:33
von __deets__
So funktioniert das halt nicht. Du hast den Wert IN der Rückruffunktion. Und die haben per Definition keinen Rückgabewert. Einfach irgendwohin Code schreiben hat keinen Effekt.
Re: Wie gibt tk.Scale() Wert zurück?
Verfasst: Donnerstag 22. Februar 2024, 21:05
von sparrow
@hubgra: print ist eine Funktion. In dem Beispiel von Sirius3 wird der Wert also der Funktion print übergeben.
Wenn dein Ziel ist den Wert an eine Funktion zu übergeben, dann ist das doch erreicht?