0
Python3を使用してPyQt5でメソッドを非同期に呼び出す方法は?Python3を使ってPyQt5でメソッドを非同期に呼び出す方法は?
私はそれを行うために信号を使用しようとしました。
import sys
from time import sleep
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel
class MainWindow(QMainWindow):
asyncFuncSignal = pyqtSignal()
def __init__(self):
super().__init__()
self.initUi()
def initUi(self):
self.label = QLabel(self)
self.label.setText("loading...")
# Trying to call 'self.asyncFunc' asynchronously
self.asyncFuncSignal.connect(self.asyncFunc)
self.asyncFuncSignal.emit()
print("loaded")
def asyncFunc(self):
# Doing something hard that takes time
# I have used 'sleep' to implement the delay
sleep(2)
self.label.setText("done")
print("asyncFunc finished")
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
このプログラムは"loaded"
を書き込む前asyncFunc
を終了しようとします。しかし、私はこのプログラムがinitUi
をすぐに終了し、ラベルにloading...
と表示し、そのあとにテキストdone
が2秒で表示されるようにしたいと思います。
これを行う最善の方法と最短の方法は何ですか?
ここに記載されていますhttp://pyqt.sourceforge.net/Docs/PyQt5/signals_slots.html私はキューに入れられた接続を使用できますが、実装方法の例は見つかりませんでした。