import sys from PyQt5.QtWidgets import * from PyQt5.QtGui import QIcon from PyQt5.QtCore import * import time from record import Record class RecordWorker(QThread): textB = pyqtSignal(str) def __init__(self): super().__init__() self.power = False self.text = '' self.record = Record() def run(self): self.power = True # self.textB.emit("start !!\n") while self.power == True: self.record.record_unit(self.textB.emit) self.record.record_unit(self.textB.emit) self.textB.emit("\nend !!\n") def stop(self): self.power = False # class MyApp(QMainWindow): class MyApp(QWidget): def __init__(self): super().__init__() self.text = '' self.blank_cnt = 0 self.blank_max = 2 self.initUI() self.t1 = RecordWorker() self.t1.textB.connect(self.set_tb) ## 시그널 슬롯 등록 self.btn1.clicked.connect(self.thread_start) self.btn2.clicked.connect(self.thread_stop) def initUI(self): self.setWindowTitle('BTS') self.setWindowIcon(QIcon('labs_icon.jpg')) self.btn1 = QPushButton('Run', self) self.btn2 = QPushButton('Stop', self) self.tb = QTextEdit() self.tb.setReadOnly(True) self.tb.setAcceptRichText(True) self.vbox = QVBoxLayout() self.vbox.addWidget(self.btn1, 0) self.vbox.addWidget(self.btn2, 1) self.vbox.addWidget(self.tb, 2) self.setLayout(self.vbox) self.setGeometry(300, 300, 800, 500) self.show() def thread_start(self): self.t1.start() def thread_stop(self): self.t1.stop() @pyqtSlot(str) def set_tb(self, content): if len(content) == 0 and self.text[-1] != "\n": self.blank_cnt += 1 if self.blank_cnt >= self.blank_max: self.blank_cnt = 0 self.text += '\n' self.tb.setText(self.text) else: self.text += content self.tb.setText(self.text) if __name__ == '__main__': app = QApplication(sys.argv) ex = MyApp() sys.exit(app.exec_())