Seite 1 von 1

update_idletasks funktioniert nicht in Windows (tkinter)

Verfasst: Mittwoch 26. Oktober 2022, 23:08
von bi3mw
Folgender Code funktioniert unter Linux einwandfrei, aber unter Windows wird solange ein blankes Fenster angezeigt bis die gesamte Ausgabe abgearbeitet ist. Woran kann das liegen ?

Code: Alles auswählen

class TkConsole(tk.Tk):
    def __init__(self):
........
        self.console= tk.Text(self, width=80, height=20)
        scroll_bar = tk.Scrollbar(self)
        scroll_bar.pack(side=tk.RIGHT)
        self.console.pack(side=tk.LEFT)
        self.console.config(yscrollcommand=scroll_bar.set)
        scroll_bar.config(command=self.console.yview)
        
........        

    def open_window(self):
        help_button.config(state=DISABLED)
        window = Window(self)
        
    def write(self, text):
        self.console.update_idletasks()
        self.console.insert(tk.END, text)
        self.console.yview_pickplace("end")

con = TkConsole()
sys.stdout = con

...... Alles was jetzt ausgegeben wird landet in der TK-Ausgabe

if __name__ == "__main__":
   tk.mainloop()

Re: update_idletasks funktioniert nicht in Windows (tkinter)

Verfasst: Donnerstag 27. Oktober 2022, 14:21
von Sirius3
Unter "einwandfrei" würde ich etwas anderes verstehen. GUI-Programme funktionieren nur, wenn sie dauerhaft im Mainloop laufen. Aus dem Code-Fragment kann man nicht wirklich herauslesen, was gemacht wird, ich befürchte aber, dass hier jemand versucht, den linearen Ablauf eines Normalen Programms in eine GUI hineinzuquetschen, was aber zwangsläufig zu Fehlern führt, weil so sind GUIs nicht gedacht.

Wenn irgendetwas im Hintergrund (parallel zur GUI) laufen soll, dann muß man sich mit Nebenläufiger Programmierung, Threading, Queues, etc auseinandersetzen.

Re: update_idletasks funktioniert nicht in Windows (tkinter)

Verfasst: Freitag 28. Oktober 2022, 15:30
von bi3mw
Das Problem hat sich gelöst. Ich habe einfach "self.console.update_idletasks()" durch "self.console.update()" ersetzt. Jetzt kommt auch unter Windows sofort die Ausgabe in die TK-Console. Im "normalen" Terminal läuft zwar alles einen Tick schneller, aber man kann halt nicht alles haben.