prob mit aktualisierung einer variablen

Fragen zu Tkinter.
Antworten
lionking
User
Beiträge: 28
Registriert: Mittwoch 28. April 2004, 16:03

hallöchen,

ich hab mir mal n kleine prog gebastelt, was eine quadratische gleichung anhand der p-q-formel löst, doch jetzt hab ich das problem, dass sich die lösung (loesungsvar) nach dem click auf "ok" nicht aktualisiert, also zwischen ok und schliessen steht eine "0", nach einem click auf "ok" sollte aber die richtige lösung stehen(falls es eine orndliche gibt...)

vlt kann mir ja jemand helfen, ich bin auch für verbesserungsvorschläge anderer art offen (z.B weiss ich nicht ob ganzen self's vor den namen sein müssen), denn ich programmiere erst seit kurzem...

Code: Alles auswählen

import Tkinter
import math
class Quad(Tkinter.Frame):
    def __init__(self, root):
        Tkinter.Frame.__init__(self, root)
        self.varp = Tkinter.StringVar()
        self.varq = Tkinter.StringVar()
        self.loesungsvar = 0
        self.label = Tkinter.Label(self, text = "dieses programm löst Quadratische gleichungen mit der p-q-Formel")
        self.label.pack()
        self.label = Tkinter.Label(self, text = "geben sie 'p' ein:")
        self.label.pack()
        self.entryp = Tkinter.Entry(self, textvariable = self.varp)
        self.entryp.pack()
        self.label = Tkinter.Label(self, text = "geben sie 'q' ein:")
        self.label.pack()
        self.entryq = Tkinter.Entry(self, textvariable = self.varq)
        self.entryq.pack()
        self.ok = Tkinter.Button(self, text = "OK", command = lambda: self.loesg(self.entryp.get(), self.entryq.get()))
        self.ok.pack(side = 'left')
        self.cancel = Tkinter.Button(self, text = "schliessen", command = root.quit)
        self.cancel.pack(side = "right")
        self.loesung = Tkinter.Label(self, text = self.loesungsvar)
        self.loesung.pack(side = 'bottom')

    def loesg(self, ps, qs):
        p, q = float(ps), float(qs)
        x1=(p/2.0)+math.sqrt(((p/2.0)**2.0)-q)
        x2=(p/2.0)-math.sqrt(((p/2.0)**2.0)-q)
        print '\nx1 ist: %d \nx2 ist: %d \n' % (x1, x2)
        self.loesungsvar = 'x1 ist: %d    x2 ist: %d' % (x1, x2)

def main():
    root = Tkinter.Tk()
    app = Quad(root)
    app.pack()
    app.mainloop()
if __name__ == '__main__':
    main()
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi lionking,

hmm warum arbeitest Du nich auch in dem Label mit einer Stringvar statt einem normalen String?
Bei einer Stringvar bekommt Tk mit, wenn sich was ändert, bei einem normalen String eben nicht.

Code: Alles auswählen

    def __init__(self, root):
        ...
        self.loesungsvar = Tkinter.StringVar()
        ...
        self.loesung = Tkinter.Label(self, textvariable = self.loesungsvar)
        ...

    def loesg(self, ps, qs):
        ...
        self.loesungsvar.set('x1 ist: %d    x2 ist: %d' % (x1, x2))

Gruß

Dookie
lionking
User
Beiträge: 28
Registriert: Mittwoch 28. April 2004, 16:03

hey cool das geht, danke!
Antworten