Ich versuche, die Benutzererfahrung zu verbessern, indem ich eine Lastmaske über dem aktiven QMainWindow/QDialog zeige, wenn Aufgaben ausgeführt werden, die einige Zeit benötigen. Ich habe es geschafft, es so zu arbeiten, wie ich es will, außer einem beweglichen GIF, wenn er die Aufgabe durchführt. Wenn ich die Lade-Maske nach Beendigung der Aufgabe belasse, beginnt die GIF-Datei so zu laufen, wie sie sollte.Behalten Sie die GIF-Animation bei, während Sie Berechnungen durchführen
Meine Klasse für die Last-Maske:
from PyQt4 import QtGui, QtCore
from dlgLoading_view import Ui_dlgLoading
class dlgLoading(QtGui.QDialog, Ui_dlgLoading):
def __init__(self,parent):
QtGui.QDialog.__init__(self,parent)
self.setupUi(self)
self.setWindowFlags(QtCore.Qt.WindowFlags(QtCore.Qt.FramelessWindowHint))
self.setGeometry(0, 0, parent.frameGeometry().width(), parent.frameGeometry().height())
self.setStyleSheet("background-color: rgba(255, 255, 255, 100);")
movie = QtGui.QMovie("loader.gif")
self.lblLoader.setMovie(movie)
movie.start()
def showEvent(self, event):
QtGui.qApp.processEvents()
super(dlgLoading, self).showEvent(event)
def setMessage(self,message):
self.lblMessage.setText(message)
Die Ui_dlgLoading enthält zwei Etiketten und einige vertikale Abstandshalter: lblLoader (die gif enthalten) und lblMessage (eine Nachricht enthalten, wenn erforderlich)
I die Last Maske mit diesem Code erstellen:
loadmask = dlgLoading(self)
loadmask.setMessage('Reading data... Please wait')
loadmask.show()
ich dachte, ich Multithreading/Multiprozessing benötigt, aber ich kann nicht für das Leben von mir herauszufinden, wie es zu tun. Ich habe irgendwo gelesen, dass Sie die Threads der GUIs nicht manipulieren können, also müsste ich stattdessen die schwere Aufgabe dorthin verschieben, aber ich bin immer noch leer.
Als einfaches Beispiel, sagen wir, ich bin versucht, eine große Datei in den Speicher zu laden:
file = open(dataFilename, 'r')
self.dataRaw = file.read()
file.close()
Around, dass ich schaffen würde und meine Last Maske Dialog schließen. Wie starte ich die Datei lesen, ohne die GIF-Animation zu stoppen?
Die GUI ist für das Ausführen einiger schwerer externer exe-Dateien gedacht, also sollte es auch damit arbeiten.