2017-05-28 29 views
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私はキューに入れられた接続を使用できますが、実装方法の例は見つかりませんでした。

答えて

0

PyQt5.QtCore.Qt.QueuedConnectionが役に立ちます。ただ、

from PyQt5.QtCore import Qt 

... 

self.asyncFuncSignal.connect(self.asyncFunc, Qt.QueuedConnection) 

self.asyncFuncSignal.connect(self.asyncFunc) 

を交換

関連する問題