Seite 1 von 1

DoubleVar() aus Scale mit float addieren

Verfasst: Sonntag 9. Juli 2017, 17:42
von Swacy
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

Re: DoubleVar() aus Scale mit float addieren

Verfasst: Sonntag 9. Juli 2017, 17:57
von 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.

Re: DoubleVar() aus Scale mit float addieren

Verfasst: Sonntag 9. Juli 2017, 18:35
von Swacy
Danke Dir vielmals :D Hast mir sehr geholfen 8)

Viele Grüße

Re: DoubleVar() aus Scale mit float addieren

Verfasst: Sonntag 9. Juli 2017, 18:40
von wuf
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:

Re: DoubleVar() aus Scale mit float addieren

Verfasst: Sonntag 9. Juli 2017, 19:04
von Swacy
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

Re: DoubleVar() aus Scale mit float addieren

Verfasst: Sonntag 9. Juli 2017, 19:15
von wuf
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: