from PyQt5.QtCore import * from PyQt5.QtWidgets import * import sys class thread_dowork(QThread): sinOut = pyqtSignal(str) # 自定义信号,执行run()函数时,从相关线程发射此信号 def __init__(self, parent=None): super(thread_dowork, self).__init__(parent) self.working = True self.num = 0 def __del__(self): self.working = False self.wait() def run(self): while self.working: file_str = 'File index {0}'.format(self.num) # str.format() self.num += 1 # 发出信号 self.sinOut.emit(file_str) # 线程休眠2秒 self.sleep(2) if self.num == 10: break class MainWidget(QWidget): def __init__(self, parent=None): super(MainWidget, self).__init__(parent) self.layout = QGridLayout(self) self.btnStart = QPushButton('开始') self.initializecomponent() self.thread = thread_dowork() self.thread.sinOut.connect(self.updatedata) # 按钮点击事件的槽函数 def buttonclick(self): # QMessageBox.about(self, '标题', '关于对话框') self.btnStart.setEnabled(False) self.thread.start() def updatedata(self, data): self.setWindowTitle(data) # 初始化UI界面控件 def initializecomponent(self): self.setWindowTitle("Form1") self.setFixedSize(400, 300) self.btnStart.setFixedSize(100, 50) self.btnStart.clicked.connect(self.buttonclick) self.layout.addWidget(self.btnStart) if __name__ == "__main__": app = QApplication(sys.argv) # 新建QApplication实例 mainWidget = MainWidget() # 实例化一个类,继承自QWidget,也可以继承QMainWindow mainWidget.show() # 显示窗口 sys.exit(app.exec_()) # 进入消息主循环,sys.exit可以不写但是关闭窗口不会退出进程 |
---|