精华内容
下载资源
问答
  • 主要介绍了python GUI库图形界面开发之PyQt5线程QThread类详细使用方法,需要的朋友可以参考下
  • PyQt5 线程分离一致性问题问题错误原因及解决功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右...

    PyQt5 线程分离一致性问题

    问题

    在线程分离的时候我想用子线程进行html访问爬取东西,但是每次加载子线程的时候都会异常终止

    错误原因及解决

    big = BigWorkThread()
    这个是我先写的每次运行到都异常终止
    后来抱着试一试的心态在前面加上了self
    self.big = BigWorkThread()
    之后就好用了
    因为不加self是局部变量,其方法运行结束的时候,它的生命周期就终止了,但是线程中的任务可能还没执行完。所以会异常终止!

    展开全文
  • pyqt5线程使用实例QThreadPool

    千次阅读 2020-03-15 18:37:38
    QThreadPool 顺序 QWidget->QThread(主线程,主要用户管理线程)->QObject(创建线程在这里创建QThreadPool线程设置)->QRunnable(主要线程逻辑) 实例 效果图 源代码 ...from PyQt5.Qt im...

    QThreadPool

    顺序

    QWidget->QThread(主线程,主要用户管理线程)->QObject(创建线程在这里创建QThreadPool线程设置)->QRunnable(主要线程逻辑)
    

    实例

    效果图

    在这里插入图片描述

    源代码
    """
    作者:鲁班工作室
    qq:1514149460
    wx:18550030945
    """
    # coding:utf-8
    
    from PyQt5.Qt import QThread, QThreadPool, QRunnable, QObject, QWidget, QApplication, QPushButton, QGridLayout, QTextEdit, pyqtSignal, QTextCursor
    import sys
    
    
    # 这里执行核心代码
    class Thread(QRunnable):
        communication = None
    
        def __init__(self):
            super(Thread, self).__init__()
            self.thread_logo = None
    
        def run(self):
            self.communication.log_signal.emit('{}线程已经执行'.format(self.thread_logo))
    
        # 自定义函数,用来初始化一些变量
        def transfer(self, thread_logo, communication):
            """
            :param thread_logo:线程标识,方便识别。
            :param communication:信号
            :return:
            """
    
            self.thread_logo = thread_logo
            self.communication = communication
    
    
    # 定义任务,在这里主要创建线程
    class Tasks(QObject):
        communication = None
        max_thread_number = 0
    
        def __init__(self, communication, max_thread_number):
            """
            :param communication:通讯
            :param max_thread_number:最大线程数
            """
            super(Tasks, self).__init__()
    
            self.max_thread_number = max_thread_number
            self.communication = communication
    
            self.pool = QThreadPool()
            self.pool.globalInstance()
    
        def start(self):
            # 设置最大线程数
    
            self.pool.setMaxThreadCount(self.max_thread_number)
            for i in range(10):
                task_thread = Thread()
                task_thread.transfer(thread_logo=i, communication=self.communication)
                task_thread.setAutoDelete(True)  # 是否自动删除
                self.pool.start(task_thread)
    
            self.pool.waitForDone()  # 等待任务执行完毕
            self.communication.log_signal.emit('线程全部执行完毕')
    
    
    # 重写QThread类
    class NowThread(QThread):
        def __init__(self, communication, max_thread_number):
            """
            :param communication:通讯
            :param max_thread_number:最大线程数
            """
            super(NowThread, self).__init__()
            self.task = Tasks(
                communication=communication,
                max_thread_number=max_thread_number
            )
    
        def run(self):
            self.task.start()
    
    
    class Window(QWidget):
        # 定义信号
        log_signal = pyqtSignal(str)
    
        def __init__(self):
            super().__init__()
            self.resize(1280, 800)
            self.setWindowTitle('QThreadPool实例')
            self.setup_ui()
            self.show()
    
        def setup_ui(self):
            # 初始化信号关联槽函数
            self.log_signal.connect(self.log_signal_event)
    
            layout = QGridLayout(self)  # 创建布局
    
            button = QPushButton('测试按钮', self)
            button.clicked.connect(self.button_event)
            text_edit = QTextEdit()
            text_edit.setObjectName('text_edit')
    
            layout.addWidget(button, 0, 0)
            layout.addWidget(text_edit, 0, 1)
            self.setLayout(layout)
    
        def button_event(self):
            thread = NowThread(
                communication=self,
                max_thread_number=5
            )
            thread.start()  # 开始线程
            thread.wait()  # 等待线程
    
        def log_signal_event(self, p_str):
            text_edit = self.findChild(QTextEdit, 'text_edit')
            text_cursor = QTextCursor(text_edit.textCursor())
            text_cursor.setPosition(0, QTextCursor.MoveAnchor)  # 移动光标
            text_cursor.insertHtml('<p style="font-size:20px;color:red;">{}</p>'.format(p_str))
            text_cursor.insertHtml('<br>')
            text_edit.setTextCursor(text_cursor)
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        win = Window()
        sys.exit(app.exec())
    
    
    展开全文
  • PyQt5线程休眠和唤醒

    千次阅读 2019-03-22 13:59:13
    在上一篇文章中我有写线程的终止 挂起和唤醒,下面这个例子是线程的休眠和唤醒,是通过线程内一个私有的属性来进行的,读者可以直接...from PyQt5.QtCore import QThread, QWaitCondition, QMutex, pyqtSignal from ...

    在上一篇文章中我有写线程的终止 挂起和唤醒,下面这个例子是线程的休眠和唤醒,是通过线程内一个私有的属性来进行的,读者可以直接将代码跑起来
    注:网上搜索的资源

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    from PyQt5.QtCore import QThread, QWaitCondition, QMutex, pyqtSignal
    from PyQt5.QtWidgets import QWidget, QVBoxLayout, QPushButton, QProgressBar
    
    class Thread(QThread):
    
        valueChange = pyqtSignal(int)
    
        def __init__(self, *args, **kwargs):
            super(Thread, self).__init__(*args, **kwargs)
            self._isPause = False
            self._value = 0
            self.cond = QWaitCondition()
            self.mutex = QMutex()
    
        def pause(self):
            print("线程休眠")
            self._isPause = True
    
        def resume(self):
            print("线程启动")
            self._isPause = False
            self.cond.wakeAll()
    
        def run(self):
            while 1:
                self.mutex.lock()
                if self._isPause:
                    self.cond.wait(self.mutex)
                if self._value > 100:
                    self._value = 0
                self._value += 1
                self.valueChange.emit(self._value)
                self.msleep(100)
                self.mutex.unlock()
    
    
    class Window(QWidget):
    
        def __init__(self, *args, **kwargs):
            super(Window, self).__init__(*args, **kwargs)
            layout = QVBoxLayout(self)
            self.progressBar = QProgressBar(self)
            layout.addWidget(self.progressBar)
            layout.addWidget(QPushButton('休眠', self, clicked=self.doWait))
            layout.addWidget(QPushButton('唤醒', self, clicked=self.doWake))
    
            self.t = Thread(self)
            self.t.valueChange.connect(self.progressBar.setValue)
            self.t.start()
    
        def doWait(self):
            self.t.pause()
    
        def doWake(self):
            self.t.resume()
    
    
    if __name__ == '__main__':
        import sys
        import cgitb
        sys.excepthook = cgitb.enable(1, None, 5, '')
        from PyQt5.QtWidgets import QApplication
        app = QApplication(sys.argv)
        w = Window()
        w.show()
        sys.exit(app.exec_())
    
    
    展开全文
  • PYQT5 线程挂起方法

    2021-01-21 22:32:13
    QThread线程挂起需要一个QWaitCondition对象,并且需要传入一个QMutex对象作为参数,QMutex对象初始化的时候应该是锁定状态,否则将出现异常情况,参考 QT多线程QWaitCondition的问题 ... 然后再调用cond.wait()挂起...

    QThread线程挂起需要一个QWaitCondition对象,并且需要传入一个QMutex对象作为参数,QMutex对象初始化的时候应该是锁定状态,否则将出现异常情况,参考 QT多线程QWaitCondition的问题 https://bbs.csdn.net/topics/380203764。
    然后再调用cond.wait()挂起线程。cond.wakeAll()唤醒线程.

    代码如下(从工程里扣下来的,可能需要修改一下才能运行):

    class MyThread(QThread):
        def __init__(self):
            super(MyThread, self).__init__()
            self.mutex = QMutex()
            self.mutex.lock()
            self.cond = QWaitCondition()
    
        def wait(self):
            self.cond.wait(self.mutex)
        def wake(self):
            self.cond.wakeAll()
        def run(self):
            for i in range(10000):
            	if i>=100:
            		self.wait()
    
    展开全文
  • 在编写GUI界面中,通常用会有一些按钮,点击后触发事件,比如去下载一个文件或者做一些操作,这些操作会耗时,如果不能及时结束,主线程将会...下面将这两个循环使用多线程来写,在PyQT5中,使用QThread from Py...
  • python+pyqt5线程、定时器

    千次阅读 2019-03-04 22:38:05
    python+Qt编写多线程的过程中,由于python和Qt都各自有各自的线程、定时器的书写方法,在此,将它整理一下。 python 线程的使用 import threading import time def fun(arg): #do somthing print('call fun...
  • 最近在做一个自动删除log的小程序,删除目录从界面中输入,没有使用多线程是可以做到,但比较耗时,界面有点卡,用多线程重写时不知道怎么在线程类中使用ui类中的文件路径,请各位高手帮忙指点下,或者使用什么方法...
  • QtCore.QThread 休眠启动中断 2020/8/2 ================================================================================= 实例1:休眠启动 ...from PyQt5.QtCore import QThread, QWaitCondition, QM.
  • 本篇文章主要介绍了PyQt5 pyqt多线程操作入门,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 转载:翻滚吧挨踢男 首先来看一个例子: # coding=utf-8 ...from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import * global sec sec=0 def setTime(): glob...
  • PyQt5自学记录(1)——PyQt5中多线程实现详解 最近想用PyQt5完成图像识别的一个GUI系统,在调用算法模型进行识别的时候,界面会卡住没有反应,所以想学习一下多线程解决这个问题。然后。。。发现没有基础学习来确实...
  • 在使用pyqt5的过程中,...参考案例一:来源《PyQT5线程:多线程(QThread),线程锁(QMutex)》 实现两个线程来在工作台显示不同打印信息。 from PyQt5.Qt import (QApplication, QWidget, QPushButton, QThread,QMutex,
  • pyqt线程进度条

    2019-04-02 16:45:00
    ui.py # -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'ui.ui' ...# Created by: PyQt5 UI code generator 5.9.2 # # WARNING! All changes made in this file will ...
  • PyQt5线程运行

    千次阅读 2019-05-25 16:21:51
    下面介绍如何实现PyQt5线程运行的方法: 下面在第一个程序的基础上继续写: (1)导入依赖库 import sys from demo import Ui_MainWindow from PyQt5.QtWidgets import QApplication, QMainWindow from PyQt5...
  • PyQt5线程

    千次阅读 2019-06-03 09:25:40
    线程一般有两种办法: 继承QThread 继承QObject并使用movetothread(官方推荐) 使用第二种方法时,在线程结束后要执行以下两行代码: self.test_thread2.quit() self.test_thread2.wait() ...from PyQt5...
  • PyQt5线程处理

    2021-04-16 09:49:02
    PyQt5线程的使用 UI界面经常遇到,当执行某个按钮时,其内部逻辑函数处理时间较长的话会导致UI几面假死,此时需要将按钮对应函数放在另一个线程中去处理。如下为线程代码: 一、线程函数 from PyQt5.QtCore import...
  • pyqt线程 例子

    2017-06-28 17:15:48
    # -*- coding: utf-8 -*- import sys from PyQt5 import QtWidgets, QtCore import time, datetime class Main(QtWidgets.QWidget): def __init__(self, parent=None): super(Main, self).__init__
  • PyQt5线程相关一些例子

    万次阅读 多人点赞 2019-06-14 13:44:11
    PyQt5线程相关一些例子 demo1 from https://www.cnblogs.com/hhh5460/p/5175322.html from PyQt5.QtWidgets import QApplication, QLabel, QWidget, QGridLayout from PyQt5.QtCore import QThread, QObject, ...
  • 问题描述: PyQt进行界面显示使用的主线程, 如果程序中出现大量的运算,一直占用主线程,会造成界面显示卡死或者强制退出。 举个例子: 没有使用多线程: # coding=utf-8 ...from PyQt5.QtWidgets import...
  • PyQt5线程刷新界面防假死

    万次阅读 多人点赞 2019-03-07 11:22:22
    在做GUI界面时我们希望后台任务能够与UI分开,在PyQt中,主线程用来重绘界面。而子线程里边的实时处理结果需要反馈到界面,子线程里边不能执行界面...下面给出类Python3+PyQt5线程防假死动态刷新界面的模板 from ...
  • PyQt5PyQt5线程 QThread 实现

    千次阅读 2020-02-13 13:50:52
    QThread类提供了一种独立于平台的线程管理方法。 QThread对象管理程序中的一个控制线程。在run()中开始执行QThreads。默认情况下,run()通过调用exec()启动事件循环,并在线程中运行Qt事件循环。 ps:很多人在学习...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 769
精华内容 307
关键字:

pyqt5线程