Entery widget

Fragen zu Tkinter.
Antworten
Eleocraft
User
Beiträge: 10
Registriert: Mittwoch 19. September 2018, 11:16

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)
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Hallo,

das funktioniert mit

Code: Alles auswählen

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

Jankie
__deets__
User
Beiträge: 14523
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Eleocraft
User
Beiträge: 10
Registriert: Mittwoch 19. September 2018, 11:16

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
Antworten