Wie gibt tk.Scale() Wert zurück?

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
hubgra
User
Beiträge: 53
Registriert: Donnerstag 20. Juli 2023, 17:20

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?
hubgra
User
Beiträge: 53
Registriert: Donnerstag 20. Juli 2023, 17:20

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.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
hubgra
User
Beiträge: 53
Registriert: Donnerstag 20. Juli 2023, 17:20

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.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

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?
hubgra
User
Beiträge: 53
Registriert: Donnerstag 20. Juli 2023, 17:20

Ich möchte den Wert als Parameter an eine Funktion übergeben. Oben habe ich print(c+c) versucht.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

@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?
Antworten