(Meiner Meinung nach) Sinnloser InvalidSyntax-Fehler

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Boruto_2200
User
Beiträge: 8
Registriert: Montag 21. Dezember 2020, 14:15

Hi Leute, ich habe ein sehr rätselhaftes Problem...

Code: Alles auswählen

from tkinter import *
from tkinter import messagebox
import time as t

main_window = Tk()
main_window.title("JustDoIt!")

def new_to_do_ok():
    if new_to_do_entry == '':
        new_to_do_label.config(text = 'Gib zuerst eine Aufgabe ein!!!')
        t.sleep(4)
        new_to_do_label.config(text = 'Gib die neue Aufgabe hier ein')

def new_to_do():
        new_to_do_window = Tk()
        new_to_do_window.title('Neue Aufgabe erstellen')
        new_to_do_label = Label(new_to_do_window, text = 'Gib die neue Aufgabe hier ein').pack()
        new_to_do_entry = Entry(new_to_do_window).pack()
        new_to_do_button = Button(new_to_do_window, text = 'OK', command =

def exit_main_window():
    main_window.destroy()

menuleiste = Menu(main_window)

datei_menu = Menu(menuleiste, tearoff=1)

datei_menu.add_command(label="Neuen Eintrag erstellen", command=new_to_do)
datei_menu.add_separator()
datei_menu.add_command(label="Exit", command=exit_main_window)

menuleiste.add_cascade(label="Datei", menu=datei_menu)

main_window.config(menu=menuleiste)

mainloop()
Das ist mein Code, und irgendwie zeigt es in dieser Zeile

Code: Alles auswählen

def exit_main_window():
    main_window.destroy()
immer an:

Code: Alles auswählen

      File "/home/pi/mu_code/fonts/Checkliste/Maincode.py", line 22
      				def exit_main_window():
      				     ^
      			      SyntaxError: invalid syntax
			      >>>
Ich kann das nicht nachvollziehen!

Vielen Dank schonmal für die Hife!! :D
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Schau mal in die Zeile davor. Da ist die Ursache zu finden.
Boruto_2200
User
Beiträge: 8
Registriert: Montag 21. Dezember 2020, 14:15

OH... Danke für die Hilfe :)
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Anmerkungen zum Code: Eingerückt wird immer mit 4 Leerzeichen pro Ebene, nicht mal 4 und mal 8. Benutze keine *-Importe, weil damit verschleiert wird, woher welcher Name stammt. Benutze keine kryptischen Abkürzungen. Warum sollte time nur t heißen?
Aller ausführbarer Code auf oberster Ebene gehört auch in eine Funktion, die man üblicherweise main nennt. Dann kann es auch nicht passieren, dass man versehentlich globale Variablen benutzt, denn alles was eine Funktion benötigt, sollte sie über ihre Argumente bekommen.
time.sleep und GUIs funktionieren nicht. Du brauchst after.
Es darf nur ein Exemplar von Tk im ganzen Programm geben, weitere Fenster macht man mit TopLevel.
new_to_do_label und new_to_do_entry sind beide an None gebunden, was wenig sinnvoll ist. Daher kann new_to_do_entry auch niemals gleich einem leeren String sein.

Code: Alles auswählen

import tkinter as tk
from tkinter import messagebox
from functools import partial

def new_to_do_ok(new_to_do_entry, new_to_do_label):
    if new_to_do_entry.get() == '':
        new_to_do_label.config(text='Gib zuerst eine Aufgabe ein!!!')
        new_to_do_label.after(4000, display_new, new_to_do_label)

def display_new(new_to_do_label):
    new_to_do_label.config(text='Gib die neue Aufgabe hier ein')

def new_to_do(main_window):
    new_to_do_window = tk.Toplevel(main_window)
    new_to_do_window.title('Neue Aufgabe erstellen')
    new_to_do_label = tk.Label(new_to_do_window, text='Gib die neue Aufgabe hier ein')
    new_to_do_label.pack()
    new_to_do_entry = tk.Entry(new_to_do_window)
    new_to_do_entry.pack()
    tk.Button(new_to_do_window, text = 'OK', command=partial(new_to_do_ok, new_to_do_entry, new_to_do_label)).pack()

def main():
    main_window = tk.Tk()
    main_window.title("JustDoIt!")

    menuleiste = tk.Menu(main_window)
    datei_menu = tk.Menu(menuleiste, tearoff=1)
    datei_menu.add_command(label="Neuen Eintrag erstellen", command=partial(new_to_do, main_window))
    datei_menu.add_separator()
    datei_menu.add_command(label="Exit", command=main_window.destroy)
    menuleiste.add_cascade(label="Datei", menu=datei_menu)
    main_window.config(menu=menuleiste)
    main_window.mainloop()

if __name__ == '__main__':
    main()
Jedes nicht-triviale GUI-Programm braucht Klassendefinitionen, um sich den Programmzustand merken zu können.
Antworten