<i id='ijUla'><tr id='ijUla'><dt id='ijUla'><q id='ijUla'><span id='ijUla'><b id='ijUla'><form id='ijUla'><ins id='ijUla'></ins><ul id='ijUla'></ul><sub id='ijUla'></sub></form><legend id='ijUla'></legend><bdo id='ijUla'><pre id='ijUla'><center id='ijUla'></center></pre></bdo></b><th id='ijUla'></th></span></q></dt></tr></i><div id='ijUla'><tfoot id='ijUla'></tfoot><dl id='ijUla'><fieldset id='ijUla'></fieldset></dl></div>

      <small id='ijUla'></small><noframes id='ijUla'>

    1. <legend id='ijUla'><style id='ijUla'><dir id='ijUla'><q id='ijUla'></q></dir></style></legend>
        <bdo id='ijUla'></bdo><ul id='ijUla'></ul>

      <tfoot id='ijUla'></tfoot>

      PyQt5 pyqt多线程操作入门

      时间:2023-12-16
            <tbody id='v8Vz9'></tbody>
        1. <i id='v8Vz9'><tr id='v8Vz9'><dt id='v8Vz9'><q id='v8Vz9'><span id='v8Vz9'><b id='v8Vz9'><form id='v8Vz9'><ins id='v8Vz9'></ins><ul id='v8Vz9'></ul><sub id='v8Vz9'></sub></form><legend id='v8Vz9'></legend><bdo id='v8Vz9'><pre id='v8Vz9'><center id='v8Vz9'></center></pre></bdo></b><th id='v8Vz9'></th></span></q></dt></tr></i><div id='v8Vz9'><tfoot id='v8Vz9'></tfoot><dl id='v8Vz9'><fieldset id='v8Vz9'></fieldset></dl></div>
          <tfoot id='v8Vz9'></tfoot>

            <small id='v8Vz9'></small><noframes id='v8Vz9'>

            <legend id='v8Vz9'><style id='v8Vz9'><dir id='v8Vz9'><q id='v8Vz9'></q></dir></style></legend>

              <bdo id='v8Vz9'></bdo><ul id='v8Vz9'></ul>

                PyQt5 是一组 Python 绑定 Qt 库的 Python 模块,支持开发界面程序。通过多线程操作可以提升程序的运行效率和用户体验。以下是一份关于 PyQt5 多线程操作入门的攻略。

                环境搭建

                在开发 PyQt5 多线程程序前,我们需要先准备好以下两个软件的安装:

                1. Python 3.x。可前往官网下载并安装。

                2. PyQt5 模块。使用 pip 命令安装,终端输入:

                pip install PyQt5

                多线程操作示例

                示例 1:通过继承 QThread 类实现多线程任务

                import sys
                from PyQt5.QtCore import QThread, pyqtSignal
                from PyQt5.QtWidgets import QApplication, QMainWindow, QProgressBar, QPushButton
                
                
                class MyThread(QThread):
                    """自定义线程类"""
                    thread_signal = pyqtSignal(int)
                
                    def __init__(self, start=1, end=100):
                        super().__init__()
                        self.start_value = start
                        self.end_value = end
                
                    def run(self):
                        """线程任务"""
                        for i in range(self.start_value, self.end_value):
                            self.thread_signal.emit(i)
                
                
                class MainWindow(QMainWindow):
                    """主窗口类"""
                    def __init__(self):
                        super().__init__()
                        self.p_bar = QProgressBar(self)
                        self.p_bar.setGeometry(50, 70, 200, 25)
                        self.btn = QPushButton("Start", self)
                        self.btn.setGeometry(80, 120, 120, 25)
                
                        self.thread = MyThread()
                        self.thread.thread_signal.connect(self.update_progress)
                        self.btn.clicked.connect(self.thread.start)
                        self.setGeometry(300, 300, 300, 200)
                
                    def update_progress(self, value):
                        """更新进度条"""
                        self.p_bar.setValue(value)
                
                
                if __name__ == '__main__':
                    app = QApplication(sys.argv)
                    win = MainWindow()
                    win.show()
                    sys.exit(app.exec_())
                

                该示例程序创建了一个新的线程,该线程从 start 到 end 值间的整数依次输出。点开开始按钮,线程任务在新线程中执行,同时主窗口中的进度条也会相应更新。通过这个示例,我们可以了解到,QThread 是实现线程操作的一种常用方式。

                示例 2:通过继承 QObject 类实现 QObject 多线程管理

                import sys
                from PyQt5.QtCore import QObject, pyqtSignal, pyqtSlot, QThread
                from PyQt5.QtWidgets import QApplication, QMainWindow, QProgressBar, QPushButton
                
                
                class MyWorker(QObject):
                    """基于QObject的工作进程"""
                    progress_changed = pyqtSignal(int)
                
                    @pyqtSlot()
                    def do_work(self):
                        """工作任务"""
                        for i in range(1, 101):
                            self.progress_changed.emit(i)
                
                
                class MyThread(QThread):
                    """基于QThread的线程类"""
                    def __init__(self, worker):
                        super().__init__()
                        self.worker = worker
                
                    def run(self):
                        """线程任务"""
                        self.worker.do_work()
                
                
                class MainWindow(QMainWindow):
                    """主窗口类"""
                    def __init__(self):
                        super().__init__()
                        self.p_bar = QProgressBar(self)
                        self.p_bar.setGeometry(50, 70, 200, 25)
                
                        self.btn = QPushButton("Start", self)
                        self.btn.setGeometry(80, 120, 120, 25)
                
                        self.worker = MyWorker()
                
                        self.thread = MyThread(self.worker)
                        self.worker.progress_changed.connect(self.update_progress)
                        self.btn.clicked.connect(self.thread.start)
                
                        self.setGeometry(300, 300, 300, 200)
                
                    def update_progress(self, value):
                        """更新进度条"""
                        self.p_bar.setValue(value)
                
                
                if __name__ == '__main__':
                    app = QApplication(sys.argv)
                    win = MainWindow()
                    win.show()
                    sys.exit(app.exec_())
                

                该示例程序创建了一个新的线程,该线程启动 worker 任务,并且基于 Qt 的 QObject 类来实现报告信号和进度 moved 信号。点开开始按钮,线程任务在新线程中执行,同时主窗口中的进度条也会相应更新。通过这个示例,我们可以了解到,QObject 和 QThread 是共同实现多线程操作的最佳方式。

                总结

                通过上述的两个示例,我们了解并应用了 QThread 和 QObject 类多线程操作的实现方式。当我们需要同时处理和展示大量的数据时,多线程操作可以有效提高我们的程序效率和用户体验。

                上一篇:Python实现图片格式转换小程序 下一篇:Python实现无损放大图片的示例代码

                相关文章

                <i id='dFMSP'><tr id='dFMSP'><dt id='dFMSP'><q id='dFMSP'><span id='dFMSP'><b id='dFMSP'><form id='dFMSP'><ins id='dFMSP'></ins><ul id='dFMSP'></ul><sub id='dFMSP'></sub></form><legend id='dFMSP'></legend><bdo id='dFMSP'><pre id='dFMSP'><center id='dFMSP'></center></pre></bdo></b><th id='dFMSP'></th></span></q></dt></tr></i><div id='dFMSP'><tfoot id='dFMSP'></tfoot><dl id='dFMSP'><fieldset id='dFMSP'></fieldset></dl></div>
                  1. <tfoot id='dFMSP'></tfoot>

                    <small id='dFMSP'></small><noframes id='dFMSP'>

                  2. <legend id='dFMSP'><style id='dFMSP'><dir id='dFMSP'><q id='dFMSP'></q></dir></style></legend>
                      <bdo id='dFMSP'></bdo><ul id='dFMSP'></ul>