DoubleVar() aus Scale mit float addieren

Fragen zu Tkinter.
Antworten
Swacy
User
Beiträge: 3
Registriert: Sonntag 9. Juli 2017, 15:30

Hallo Ihr lieben,

ich bin mit den Grundkenntnissen von Python vertraut, doch nun komm ich einfach nicht weiter.
Beim Versuch ein Scale, welche eine DoubleVar Variable verwendet mit einer float-Variable zu addieren, gibt es einen Compiler Fehler, dass DoubleVar nicht mir float addiert werden kann.
Da mMn ein DoubleVar eine float ist, erschließt sich mir der Fehler nicht wirklich.

Hier mal ein kleiner Codeschnipsel:

Code: Alles auswählen

import tkinter as tk

    
def getScaleVar(label):
    def count():        
        s_var = scale.get()
        pH_var = pH_Var
        add = s_var + pH_var
        label.config(text=add)             
        label.after(100, count)            
    count()


root = tk.Tk()

scale_Var = tk.DoubleVar()
scale_Var.set(0.00)
pH_Var = tk.DoubleVar()
pH_Var.set(6.52)


label = tk.Label(root, textvariable=pH_Var)
label.pack()

label = tk.Label(root, textvariable=scale_Var)
scale = tk.Scale(root, from_=-3, to=3, variable=scale_Var, resolution=0.01, length=460, orient=tk.HORIZONTAL)


label.pack()
getScaleVar(label)

scale.pack()


root.mainloop()
Vermutlich hab ich einen Denkfehler und hoffe Ihr habt ein Tipp für mich :)

Viele Grüße
Zuletzt geändert von Anonymous am Sonntag 9. Juli 2017, 17:50, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

@Swacy: `DoubleVar` ist kein `float`. Schau Dir mal an wie Du den Wert von `pH_Var` setzt und überlege wie man da dann wohl wieder heran kommen könnte. Falls Du es nicht erraten kannst, schau nach was das Objekt für Methoden hat.

Bezüglich der Namensschreibweisen könntest Du mal in den Style Guide for Python Code schauen.

Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.

Und bei GUI-Programmierung kommst Du um objektorientierte Programmierung nicht wirklich herum.
Swacy
User
Beiträge: 3
Registriert: Sonntag 9. Juli 2017, 15:30

Danke Dir vielmals :D Hast mir sehr geholfen 8)

Viele Grüße
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hi Swacy
Willkommen in unserem Forum! Wie gefällt dir das folgende:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

try:
    #~~ For Python 2.x
    import Tkinter as tk
except ImportError:
    #~~ For Python 3.x
    import tkinter as tk

 
def get_scale_var(value):
    total = scale_var.get() + ph_var.get()
    ph_var.set("{:.2f}".format(total))
 
root = tk.Tk()
 
scale_var = tk.DoubleVar()
scale_var.set(0.00)
#scale_var.trace('w', get_scale_var, scale_var)
ph_var = tk.DoubleVar()
ph_var.set(6.52)
 
tk.Label(root, textvariable=ph_var).pack()
tk.Label(root, textvariable=scale_var).pack()

tk.Scale(root, from_=-3, to=3, variable=scale_var, resolution=0.01,
    length=460, orient=tk.HORIZONTAL, command=get_scale_var).pack() 
 
root.mainloop()
Gruss wuf :wink:
Take it easy Mates!
Swacy
User
Beiträge: 3
Registriert: Sonntag 9. Juli 2017, 15:30

Hi wuf,

der Style ist natürlich um ein vielfaches übersichtlicher/ansehnlicher :)
Bin in der Hinsicht auch noch blutiger Anfänger :oops:

Die Werte werden aber nicht richtig addiert :? Oder ich hab irgendwo einen Fehler.

Leider muss ich auch mit der after-Methode arbeiten, da die ph_val alle 5000ms abgerufen wird.
Bin aber wie gesagt noch in einer absoluten Lernphase und bin für alle Tipps/Verbesserungen unglaublich dankbar :D
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Ist es so besser?

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

try:
    #~~ For Python 2.x
    import Tkinter as tk
except ImportError:
    #~~ For Python 3.x
    import tkinter as tk

PH_CONST = 6.52
 
def get_scale_var(value):
    total = PH_CONST + scale_var.get()
    ph_var.set("{:.2f}".format(total))
 
root = tk.Tk()
 
scale_var = tk.DoubleVar()
scale_var.set(0.00)
#scale_var.trace('w', get_scale_var, scale_var)
ph_var = tk.DoubleVar()
ph_var.set(PH_CONST)
 
tk.Label(root, textvariable=ph_var).pack()
tk.Label(root, textvariable=scale_var).pack()

tk.Scale(root, from_=-3, to=3, variable=scale_var, resolution=0.01,
    length=460, orient=tk.HORIZONTAL, command=get_scale_var).pack() 
 
root.mainloop()
Gruss wuf :wink:
Take it easy Mates!
Antworten