0
내가 (등, 열림/닫힘 밸브), 데이터를 수집하여이를 처리, 그것을 표시하는 응용 프로그램을 만들려고 노력하고, 일부 작동하고있어PyQt5 : 타이머 스레드에서
문제 설명. 더 엄격한 시간 제약이있는 미래의 애플리케이션을위한 실습으로 데이터 캡처 및 처리를 별도의 스레드에서 실행하려고합니다.
현재 문제는 다른 스레드에서 타이머를 시작할 수 없다는 것입니다.
현재 코드 진행
import sys
import PyQt5
from PyQt5.QtWidgets import *
from PyQt5.QtCore import QThread, pyqtSignal
# This is our window from QtCreator
import mainwindow_auto
#thread to capture the process data
class DataCaptureThread(QThread):
def collectProcessData():
print ("Collecting Process Data")
#declaring the timer
dataCollectionTimer = PyQt5.QtCore.QTimer()
dataCollectionTimer.timeout.connect(collectProcessData)
def __init__(self):
QThread.__init__(self)
def run(self):
self.dataCollectionTimer.start(1000);
class MainWindow(QMainWindow, mainwindow_auto.Ui_MainWindow):
def __init__(self):
super(self.__class__, self).__init__()
self.setupUi(self) # gets defined in the UI file
self.btnStart.clicked.connect(self.pressedStartBtn)
self.btnStop.clicked.connect(self.pressedStopBtn)
def pressedStartBtn(self):
self.lblAction.setText("STARTED")
self.dataCollectionThread = DataCaptureThread()
self.dataCollectionThread.start()
def pressedStopBtn(self):
self.lblAction.setText("STOPPED")
self.dataCollectionThread.terminate()
def main():
# a new app instance
app = QApplication(sys.argv)
form = MainWindow()
form.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
작업이 활용하는 방법에 대한 조언을 주시면 감사하겠습니다!
고마워요! 이것은 'self.dataCollectionTimer.timeout.connect (self.collectProcessData)'를 'self.dataCollectionTimer.timeout.connect (lambda : self.collectProcessData)' 으로 수정하면됩니다. 그렇지 않으면 오류가 발생합니다 :'TypeError : collectProcessData()는 0 개의 위치 지정 인수를 취하지 만 1 개는 인수가 전달되지 않았기 때문에 실제로 이해하지 못합니다. – robotHamster
@robotHamster 제대로 작동했다면 올바른 답으로 표시해 두는 것을 잊지 마십시오. – eyllanesc
@ellyanesc 답에 람다를 추가해도 괜찮습니까? – robotHamster