Verwenden von Threads

Es ist möglich, dass Plug-Ins Threads mithilfe des Python-Threadingmoduls oder Qt für Python-Threadingklassen erstellen.

Dies kann nützlich sein, um Hintergrundverarbeitung oder E/A-Vorgänge auszuführen, während Designer ausgeführt wird.

Es ist wichtig zu beachten, dass die meisten Klassen und Methoden in der Python-API von Designer nur über den Hauptanwendungsthread aufgerufen werden können. Wenn Sie also Änderungen an Graf vornehmen möchten, der derzeit in Designer geöffnet ist, müssen Sie diese über den Hauptanwendungs-Thread vornehmen.

Eine mögliche Lösung ist die Verwendung von QThread und Verbindungen in der Warteschlange, wie im folgenden Beispiel:

import time

from PySide2 import QtCore





## Our thread object.

class TimerThread(QtCore.QThread):

    tick = QtCore.Signal()



    def run(self):

        for i in range(0, 7):

            print("Emitting signal from thread %s" % QtCore.QThread.currentThread())

            self.tick.emit()

            time.sleep(0.5)





## Our receiver object, created on the main thread.

class Receiver(QtCore.QObject):

    def __init__(self, parent=None):

        super(Receiver, self).__init__(parent)



    def onTick(self):

## This is called on the main thread. It is safe to use the sd API here.

        print("Tick received in thread %s" % QtCore.QThread.currentThread())





timer = TimerThread()

receiver = Receiver()



## Use QtCore.Qt.QueuedConnection to make sure that slots are called on the main thread.

## You can also use QtCore.Qt.BlockingQueuedConnection if you need to block while the slot is called.

timer.tick.connect(receiver.onTick, QtCore.Qt.QueuedConnection)



## Start out thread.

timer.start()
recommendation-more-help
substance-3d-designer-help-guide