私は複数のスレッドを生成するPySide(Qt)GUIを持っています。スレッドはGUIを更新する必要があることがあります。私はこれを次のように解決しました:PySide:別のスレッドからGUIを簡単に更新する方法
class Signaller(QtCore.QObject) :
my_signal = QtCore.Signal(QListWidgetItem, QIcon)
signaller = Signaller()
class MyThread(threading.Thread):
def __init__(self):
super(IconThread, self).__init__()
# ...
def run(self) :
# ...
# Need to update the GUI
signaller.my_signal.emit(self.item, icon)
#
# MAIN WINDOW
#
class Main(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
# ...
# Connect signals
signaller.my_signal.connect(self.my_handler)
@QtCore.Slot(QListWidgetItem, QIcon)
def my_handler(self, item, icon):
item.setIcon(icon)
def do_something(self, address):
# ...
# Start new thread
my_thread = MyThread(newItem)
my_thread.start()
# ...
もっと簡単な方法はありますか?シグナルやハンドラを作成してそれらを接続するには、数行のコードが必要です。
なぜあなたは 'QThread'を使用していませんか? – Avaris
もし 'QThread'で簡単なら、私は1つを使うことを考えます。問題は、既存のコードが 'threading.Thread'を使う傾向があることです。 – Petter
'QThread'はシグナルをサポートしているので、より良いです。 'Signaller'クラスは必要ありません。しかし基本的に、あなたの方法は方法です。スレッドとGUIの間で通信するには、信号とスロットが必要です。 – Avaris