QT Designerを使用してGUIを作成しました。それはかなりうまくいくが、より複雑な呼び出しでは、メインウィンドウを更新せずにロックアップする。私はCustomComplexFunction()
を実行したいのですが、メインウィンドウのtextEditを常にバックエンド情報を変更して更新していて、2秒ごとに実行したいと思っていました。次のコードは正しいと思われ、エラーなしで実行されますが、textEditは更新されません。 QTデザイナーから設計された.uiファイルをpushButtonとtextEditでインポートしていますので、コードがなくても実行されません。PyQt5 GUIにスレッディングを追加する方法は?
Main.py
import sys
from PyQt5.QtWidgets import QDialog, QApplication, QPushButton, QVBoxLayout, QMainWindow
from PyQt5.QtCore import QCoreApplication, QObject, QRunnable, QThread, QThreadPool, pyqtSignal, pyqtSlot
from PyQt5 import uic, QtGui
class Worker(QObject):
newParams = pyqtSignal()
@pyqtSlot()
def paramUp(self):
x=1
for x in range(100):
time.sleep(2)
self.newParams.emit()
print ("sent new params")
x +=1
Ui_somewindow, _ = uic.loadUiType("mainwindow.ui") #the path to UI
class SomeWindow(QMainWindow, Ui_somewindow, QDialog):
def __init__(self):
QMainWindow.__init__(self)
Ui_somewindow.__init__(self)
self.setupUi(self)
# Start custom functions
self.params = {}
self.pushButton.clicked.connect(self.complex) #NumEvent
def complex(self):
self.work = Worker()
self.thread = QThread()
self.work.newParams.connect(self.changeTextEdit)
self.work.moveToThread(self.thread)
self.thread.start()
self.CustomComplexFunction()
def CustomComplexFunction(self):
self.params['City'] = 'Test'
def changeTextEdit(self):
try:
City = self.params['City']
self.textEdit_14.setPlainText(City)
except KeyError:
City = None
if __name__ == "__main__":
app = QApplication(sys.argv)
window = SomeWindow()
window.show()
sys.exit(app.exec_())
あなたはSignals and Slots hereのための公式ドキュメントを参照することができ、これSO postも非常に有用だったが、私はそれを正しく構築されたように思えます。ドキュメントによれば、エミッタは信号が使用されているかどうかは気にしません。これは、コードにはエラーはないが動作しない理由である可能性があります。
どのように動作させるためのアイデアですか?または、少なくともエミッタと信号をテストするための何らかの方法?
アプリケーションと幸運はあなたが常に同じテキスト、すなわち 'self.params [ '市']'設定していませんか? 'changeTextEdit'は2秒ごとに呼び出されますか? – m7913d
おそらく、実行することができないので、私はまだそれに気づいていません。 – RknRobin
実際には、 'CustomComplexFunction()'は7秒ごとに 'self.params ['CIty']'をバックグラウンドで変更しています。わかりやすくするために、この例を残しましたが、 'self.params'は私がメインウィンドウから監視したいものです。 – RknRobin