私の問題のサンプルコードを書いた。このコードは、2つの与えられた数字の合計を生成し、テキストブラウザで結果を表示し、最初の数字をsumに置き換えて2番目の数値に加え、テキストブラウザで結果を再度表示する必要があります。問題は次のとおりです。Qthreadの使用中にシグナルスロットの問題
1 - 信号が正常に動作しないのはなぜですか?
2 - テキストブラウザで表示するためにsum-numberで信号を出力するにはどうすればよいですか?
import sys
import time
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class AreaThread(QThread):
signal = pyqtSignal()
def __init__(self, no1, no2, parent):
QThread.__init__(self)
self.no1 = no1
self.no2 = no2
def area(self):
for i in range(10):
self.sum = self.no1 + self.no2
self.no1 = self.no2
self.no2 = self.sum
self.signalemit()
time.sleep(1)
def signalemit(self):
self.signal.emit()
def run(self):
self.area()
class GeneralizedRun (QMainWindow):
def __init__(self, no1, no2):
QMainWindow.__init__(self)
self.no1 = no1
self.no2 = no2
def initUi(self, mainwindow):
mainwindow.centralWidget = QWidget(mainwindow)
self.runflow = QTextBrowser()
self.runflow.isReadOnly()
self.runflow.setText('running:')
self.runflow.moveCursor(QTextCursor.End)
self.runflow.show()
mainwindow.centralWidget = self.runflow
self.threadruning()
def threadruning(self):
self.area = AreaThread(self.no1, self.no2, self)
self.area.start()
self.area.signal.connect(self.updatetexteditor)
def updatetexteditor(self):
self.runflow.insertPlainText('\n\n' + 'sum')
self.runflow.moveCursor(QTextCursor.End)
class MainApplication(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.setWindowTitle('Home')
self.setGeometry(50, 50, 500, 500)
#Main widget
self.mainwidget = QWidget()
self.mainlayout = QVBoxLayout()
#Widgets
#Form line edits
self.no1 = QLineEdit()
self.no2 = QLineEdit()
self.run = QPushButton('Run')
self.exit = QPushButton('Exit')
self.form = QFormLayout()
self.form.addRow('First number', self.no1)
self.form.addRow('Second number', self.no2)
self.mainlayout.addLayout(self.form)
self.mainlayout.addWidget(self.run)
self.mainlayout.addWidget(self.exit)
self.exit.clicked.connect(self.exitapplication)
self.run.clicked.connect(self.mainprogramrun)
self.mainwidget.setLayout(self.mainlayout)
self.mainwidget.show()
def exitapplication(self):
sys.exit()
def mainprogramrun(self):
number1 = float(self.no1.text())
number2 = float(self.no2.text())
run = GeneralizedRun(number1, number2)
run.initUi(self)
def main():
application = QApplication(sys.argv)
application_window = MainApplication()
application.exec_()
if __name__ == '__main__':
main()
'self.process.signal.connect(self.updatetexteditor)'。 – ekhumoro
私の間違いはここに入力してください。私はそれを修正し、まだ動作しません。 –
あなたの本当のコードで何かが 'initUi()'を呼び出していますか?それが問題でない場合は、[mcve]の作成方法に関するガイダンスをお読みください。 – ekhumoro