Seite 1 von 1

Entery widget

Verfasst: Dienstag 4. Dezember 2018, 08:39
von Eleocraft
ich versuche einen rechner (pq formel) mit einer tkinter-oberfläche zu programmieren...

Code: Alles auswählen

from math import *
from tkinter import *

screen = Tk()
screen.title('PQ-Formel')





def pq(p, q):
    z = (p/2)**2 - q
    if z >= 0:
        x = -p / 2 + sqrt((p/2)**2 - q)
        y = -p / 2 - sqrt((p/2)**2 - q)
        return x, y
    else:
        print('error, errorcode:8742576w08006987060947')



Label(screen, text='p: ').grid(row=0)
Label(screen, text='q: ').grid(row=1)


ep = Entry(screen)
eq = Entry(screen)

ep.grid(row=0, column=1)
eq.grid(row=1, column=1)

Label(screen, text=pq(ep, eq)).grid(row=3)

wenn ich aber den code ausführe, erscheint die meldung:
TypeError: unsupported operand type(s) for /: 'Entry' and 'int'
was kann ich machenum 'entry' in 'int' ummzuwandeln(int() funktioniert nicht)

Re: Entery widget

Verfasst: Dienstag 4. Dezember 2018, 11:28
von Jankie
Hallo,

das funktioniert mit

Code: Alles auswählen

int(Entry.get())
Mit freundlichen Grüßen / kind regards

Jankie

Re: Entery widget

Verfasst: Dienstag 4. Dezember 2018, 11:47
von __deets__
Das ist zwar nicht ganz falsch, weil damit natuerlich der Wert korrekt abgeholt wird. Allerdings ist der ja am Anfang leer. Es wird also mit eine ValueError krachen.

Das ganze Programm funktioniert noch lange nicht.

Da fehlt ein mainloop, die pq-Funktion darf nicht einfach direkt aufgerufen werden, sondern nur nach expliziter Aufforderung zB durch einen Button. Die Werte der Entries sollten am besten per IntVar eingesammelt werden. Die pq-Funktion ist so wie dort beschrieben sehr schlecht implementiert. Sie gibt entweder ein Tupel mit Werten zurueck, oder None und *printed* einen voellig undurchsichtigen Fehlercode.

Stattdessen sollte sie eine Exception werfen, und in der action des Buttons muss diese dann abgefangen werden, und entsprechend reagiert werden - durch ein Fehler-Label das enabled wird oder aehnliches.

Re: Entery widget

Verfasst: Dienstag 4. Dezember 2018, 15:24
von Eleocraft
hier ein kurzes codeupdate

Code: Alles auswählen

from math import *
from tkinter import *

screen = Tk()
screen.title('PQ-Formel')
def pq(p, q):
    z = (p/2)**2 - q
    if z >= 0:
        x = -p / 2 + sqrt((p/2)**2 - q)
        y = -p / 2 - sqrt((p/2)**2 - q)
        return x, y
    else:
        print('error, errorcode:8742576w08006987060947')

Label(screen, text='p: ').grid(row=0)
Label(screen, text='q: ').grid(row=1)


ep = Entry(screen)
eq = Entry(screen)
ep.grid(row=0, column=1)
eq.grid(row=1, column=1)

def ergebnis():
    p = int(ep.get())
    q = int(eq.get())
    ergebnisM = pq(p, q)
    Label(screen, text='x1:            x2:').grid(row=0, column=3)
    Label(screen, text=ergebnisM).grid(row=1, column=3)
Button(screen, text='Ergebnis anzeigen', command=ergebnis).grid(row=3, column=0)

mainloop()
ich weiß, ich habe manche sachen nicht so elegant gelöst... aber solange es funktioniert bin ich zufrieden :D