Seite 1 von 1

GUI ist da, Berechnung wird aber nicht angezeigt

Verfasst: Dienstag 15. September 2020, 14:07
von raspPy
Hallo,

ich habe begonnen mit Tkinter mit eine GUI zu basteln, das klappte auch ganz gut. Das Programm macht aber leider trotzdem nicht das, was ich will:
Es empfängt zwei Zahlen (z.B. 1,4 und 20) vom Nutzer und berechnet dann nach Button "Do it" den Wert (siehe dazu die Funktion calc im code unten). Dieses Ergebnis soll angezeigt werden, bis man den nächsten Wert mit anderen Zahlen berechnet.

Das Ergebnis der Berechnung in def calc() soll in einem Label angezeigt werden, doch das passiert nicht. Die Fehlermeldung ist auch etwas kryptisch: "Exception in Tkinter callback Traceback (most recent call last):".

Weiß jemand den Grund für meine Probleme?


Code: Alles auswählen

from tkinter import *
from tkinter import messagebox

root = Tk()
root.wm_title("Calculate something")
root.config(background="#FFFFFF")


leftFrame = Frame(root, width=200, height=400)
leftFrame.grid(row=0, column=0, padx=10, pady=3)

leftLabel1 = Label(leftFrame, text="This app helps to calculate")
leftLabel1.grid(row=0, column=0, padx=10, pady=3)


rightFrame = Frame(root, width=200, height=400)
rightFrame.grid(row=0, column=1, padx=10, pady=3)

rightLabel1 = Label(rightFrame, text="first number:")
rightLabel1.grid(row=0, column=1, padx=10, pady=3)

rightLabel2 = Label(rightFrame, text="2nd number")
rightLabel2.grid(row=1, column=1, padx=10, pady=3)

rightLabel3 = Label(rightFrame, text="Result")
rightLabel3.grid(row=3, column=1, padx=10, pady=25)

num1_var = DoubleVar()
num2_var = DoubleVar()

# entrys
num1_ent = Entry(rightFrame, width=30, textvariable=num1_var)
num1_ent.grid(row=0, column=2, padx=10, pady=3)

num2_ent = Entry(rightFrame, width=30, textvariable=num2_var)
num2_ent.grid(row=1, column=2, padx=10, pady=3)

def calc():
    num1 = num1_var.get()
    num2 = num2_var.get()

    if num1 == num2:
        messagebox.showerror(titel = "Error", message = "Sorry, you should have two different numbers", icon = "error")
    elif num1 < num2:
        rightLabel4 = Label(rightFrame, width=30, text=((num2 - num1)-1))
        rightLabel4.grid(row=3, column=2, padx=10, pady=25)
    elif num1 > num2:
        rightLabel4 = Label(rightFrame, width=30, text=((num2 - num1)-5))
        rightLabel4.grid(row=3, column=2, padx=10, pady=25)

buttonFrame = Frame(rightFrame)
buttonFrame.grid(row=3, column=1, padx=10, pady=3)
B1 = Button(rightFrame, text="Do it", bg="#FF0000", width=15, command=calc)
B1.grid(row=2, column=2, padx=50, pady=10)

root.mainloop()  # GUI wird upgedatet. Danach keine Elemente setzen



Re: GUI ist da, Berechnung wird aber nicht angezeigt

Verfasst: Dienstag 15. September 2020, 17:29
von __blackjack__
@raspPy: Da fehlt jetzt noch der Traceback in dem steht welche Ausnahme da wo genau ausgelöst wird.

Re: GUI ist da, Berechnung wird aber nicht angezeigt

Verfasst: Dienstag 15. September 2020, 17:35
von raspPy
@__blackjack__: was ist denn ein Traceback? Wie mache ich das hier? ich bin da irgendwie lost.

Re: GUI ist da, Berechnung wird aber nicht angezeigt

Verfasst: Dienstag 15. September 2020, 18:17
von __blackjack__
@raspPy: Lies noch mal die Fehlermeldung, vielleicht findest Du da das Wort vielleicht. Und da ist am Ende ein Doppelpunkt und nach dem folgt ja noch so ein kleines bisschen Text. Der dann verrät welche Ausnahme auftritt und wo.

Re: GUI ist da, Berechnung wird aber nicht angezeigt

Verfasst: Dienstag 15. September 2020, 19:10
von raspPy
Ok, ja, ich habe die Fehlermeldung gelesen und gegoogelt, doch ich verstehe nicht, was ich tun muss. Es muss anscheinend mit der Messagebox zusammenhängen. Kannst du mir einen weiteren Tipp geben?

Re: GUI ist da, Berechnung wird aber nicht angezeigt

Verfasst: Dienstag 15. September 2020, 19:12
von __deets__
Kannst du bitte mal die volle Fehlermeldung posten? Alle 20-30 oder so Zeilen? Nicht nur die erste?

Re: GUI ist da, Berechnung wird aber nicht angezeigt

Verfasst: Mittwoch 16. September 2020, 15:33
von raspPy
Klar kann ich das, sorry:

Code: Alles auswählen

Exception in Tkinter callback
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/tkinter/__init__.py", line 1883, in __call__
    return self.func(*args)
  File "/Users/Ich/Documents/Pycharm-Projects/pythonProject4/main.py", line 43, in calc
    messagebox.showerror(titel = "Error", message = "Sorry, you should have two different numbers", icon = "error")
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/tkinter/messagebox.py", line 94, in showerror
    return _show(title, message, ERROR, OK, **options)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/tkinter/messagebox.py", line 72, in _show
    res = Message(**options).show()
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/tkinter/commondialog.py", line 44, in show
    s = w.tk.call(self.command, *w._options(self.options))
_tkinter.TclError: bad option "-titel": must be -default, -detail, -icon, -message, -parent, -title, -type, or -command
Wie ich festgestellt habe, funktioniert der Teil des Codes nicht, wo das Fehler-Fenster bei zwei gleichen Eingabe-Zahlen kommen sollte.

Re: GUI ist da, Berechnung wird aber nicht angezeigt

Verfasst: Mittwoch 16. September 2020, 17:28
von __blackjack__
@raspPy: Das was in Python Schlüsselwortargumente sind, heisst in Tk/Tcl Option. Die werden dort mit einem vorangestellten "-" geschrieben, aber ansonsten ist das eine 1:1 Abbildung. Und die Fehlermeldung sagt Dir nun, dass es `titel` *nicht* gibt und listet auf welche Optionen, also in Python Schlüsselwortargumente, es tatsächlich für diesen Aufruf gibt. Schau Dir die mal genau an und vergleiche sie mit `titel`, dann findest Du den Fehler den Du gemacht hast.

Re: GUI ist da, Berechnung wird aber nicht angezeigt

Verfasst: Mittwoch 16. September 2020, 18:05
von raspPy
Ok, ja, ich habe es gefunden. Ein typo, wie dumm. Immerhin habe ich nun auch verstand, was die Fehlermeldung von mir will. Danke für die Erklärung. Was ich nicht verstehe, ist folgendes: In einem Beispiel online habe ich gesehen, dass man das Icon der Nachrichtbox ändern kann. dies erfolgte mit "icon=error", was in dem Fall dann das von Windows bekannte rote Fehlersymbol anzeigen sollte. Warum geht das nicht bzw. warum kennt er das bei mir nicht?

Re: GUI ist da, Berechnung wird aber nicht angezeigt

Verfasst: Mittwoch 16. September 2020, 21:11
von __blackjack__
@raspPy: Das sollte bei `showerror()` auch schon so passieren, denn genau das macht die Funktion bereits wenn man keinen Wert für `icon` angibt.

Re: GUI ist da, Berechnung wird aber nicht angezeigt

Verfasst: Freitag 18. September 2020, 08:41
von raspPy
__blackjack__ hat geschrieben: Mittwoch 16. September 2020, 21:11 @raspPy: Das sollte bei `showerror()` auch schon so passieren, denn genau das macht die Funktion bereits wenn man keinen Wert für `icon` angibt.

Ich arbeite mit macOS und PyCharm mit Python 3.7 und da wird leider kein Symbol angezeigt. Nur eine Rakete in den Python-Farben.

Re: GUI ist da, Berechnung wird aber nicht angezeigt

Verfasst: Freitag 18. September 2020, 11:01
von __deets__
Redest du vom Dock? Denn da ist bei mir eine Rakete. Aber nur einmal für das ganze Programm.

Re: GUI ist da, Berechnung wird aber nicht angezeigt

Verfasst: Freitag 18. September 2020, 11:35
von raspPy
Nein, von der Messagebox. da wird links neben dem Text die Rakete angezeigt, es ist die gleiche wie im Dock. Eigentlich sollte da ein error-Symbol angezeigt werden.

Siehe dazu: https://www.plus2net.com/python/tkinter-messagebox.php

Das rote Symbol würde ich erwarten, wenn es durch showerror() automatisch kommen soll.