Seite 1 von 1

prob mit aktualisierung einer variablen

Verfasst: Donnerstag 27. Mai 2004, 14:59
von lionking
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()

Verfasst: Donnerstag 27. Mai 2004, 15:54
von Dookie
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

Verfasst: Donnerstag 27. Mai 2004, 16:36
von lionking
hey cool das geht, danke!