Ich habe ein Problem, wo ich versuche, eine ganze Menge von PNG-Bildern zu laden und anschließend Thema mit PyQt anzuzeigen. Mein aktueller Arbeitsablauf besteht darin, einen Multiprozessor-Pool zu verwenden, um eine Funktion zuzuordnen, die jede Datei mit 'rb' Werten öffnet und dann die Bytes jeder Datei in eine vereinheitlichte Liste liest. Schließlich zeigt der Elternprozess das Bild an, indem er die Methode fromImageData
eines QPixmap-Objekts aufruft. Diese Methode scheint gut zu funktionieren, aber es ist ziemlich langsam, jedes Mal, wenn ich zwischen den Bildern umschalte (8K-Auflösung), eine neue Pixmap neu zu zeichnen.Erstellen von QPixmaps in einem Thread
Ich hatte gehofft, dass es vielleicht schneller ist, stattdessen eine Pixmap für jedes Bild zu erstellen und durch die Pixmap zu fahren, anstatt dieselbe Pixmap bei jedem Schritt mit einem neuen Bild neu zu erstellen. Um dies zu tun, habe ich versucht, eine Pixmap in der Multiprozessfunktion zu erstellen, dies ist jedoch nicht erlaubt, da es keine übergeordnete QApp im Thread gibt.
Meine Frage ist, ob es einen richtigen Weg gibt, dies zu tun? Ich habe immer daran gedacht, es mit Sellerie/Reddis zu tun, aber ich kann nicht sehen, dass es andere Unterschiede gibt. Erstellen Sie für jedes Bild ein neues Pixmap und schalten Sie sie mit setPixmap
um? Ist dies sogar eine praktikable Option oder gibt es dafür geeignete Möglichkeiten?
Großartig, danke @bnaecker! Ich werde es versuchen so schnell wie möglich –
Dieser Code wird nicht funktionieren. Qt unterstützt das Erstellen von Pixmaps außerhalb des Hauptthreads nicht, daher müssen Sie 'QImage' verwenden. Außerdem erbt "QRunnable" 'QObject' nicht, so dass es keine Signale aussenden kann. Sie sollten 'QThread' verwenden. – ekhumoro
@ekhumoro Danke, dass du darauf hingewiesen hast, ich habe meine Antwort aktualisiert. – bnaecker