Die GUI wird nicht aktualisiert, bis die Neuzeichnungsereignisse verarbeitet werden. Diese werden normalerweise am Anfang einer Ereignisschleife ausgeführt. Wenn Ihre Anwendung mit dem Ausführen von Python-Code beschäftigt ist, wird nicht mit dem nächsten Zyklus der Ereignisschleife fortgefahren, bis dieser Code ausgeführt wird. Der richtige Weg besteht darin, lang andauernde Operationen in einen separaten Thread zu pushen, so dass der Haupt-GUI-Thread nicht gehalten wird und die Ereignisschleife GUI-Update-Ereignisse verarbeiten kann, aber es gibt Möglichkeiten, um sie herumzuhacken.
Sie können die Anwendung einfach anweisen, die Neuzeichnungsereignisse zu verarbeiten.
ui.text_terminal.append("Downloading....")
QtGui.QApplication.processEvents()
self.df = dbrs.retrieve(date)
Rufen Sie diese vor Ihrer retrieve
Funktion und es sollte eine Aktualisierung der GUI erzwingen.
Die andere Möglichkeit besteht darin, die Operation einfach auf den nächsten Event-Loop-Zyklus zu schieben, was bedeutet, dass es mindestens 1 Redraw gibt, bevor es ausgeführt wird. Sie können dies mit einem single shot QTimer
tun. Dies unterbricht den Fluss Ihrer Funktion, so dass es nur Sinn macht, wenn Sie nach dem Download nichts anderes tun.
def do_retrieve(self, date):
self.df = dbrs.retrieve(date)
ui.text_terminal.append("Downloading....")
QtCore.QTimer.singleShot(1, lambda: self.do_retrieve(date))
GUI-Code hat in der Regel eine Ereignisschleife ausgeführt, um Updates zu verarbeiten. – stark
Wie kann ich sicherstellen, dass "Schleife" die letzte Aufgabe abgeschlossen hat, bevor etwas anderes ausgeführt wird? – Nickpick
Wahrscheinlich wird die Ereignisschleife nicht ausgeführt, während Sie Ihren Download ausführen. Wenn Sie möchten, dass eine GUI etwas ausführt, müssen lang andauernde Aufgaben von einem separaten Thread ausgeführt werden. – stark