PyQt5多线程防卡死和多窗口用法的实现


Posted in Python onSeptember 15, 2020

心得:写着写着找到了自己的感觉,还是需要大量的代码和项目来加深对代码的理解

一、PyQt5多线程防卡死

在界面中,通常用会有一些按钮,点击后触发事件,比如去下载一个文件或者做一些操作,这些操作会耗时,如果不能及时结束,主线程将会阻塞,这样界面就会出现未响应的状态,因此必须使用多线程来解决这个问题。

# -*- coding: UTF-8 -*-
""""=================================================
@Project -> File  :Django 
@IDE  :PyCharm
@Author :爱跳水的温文尔雅的laughing
@Date  :2020/4/2 21:56
@Desc  :
=================================================="""

from PyQt5.QtCore import pyqtSignal, QThread
from PyQt5.QtWidgets import QWidget, QMainWindow, QApplication
from untitled import Ui_MainWindow
import sys
import time

class Example(QThread):
  signal = pyqtSignal(str) # 括号里填写信号传递的参数

  def __init__(self):
    super(Example, self).__init__()

  def __del__(self):
    self.wait()

  def run(self):
    """
    进行任务操作,主要的逻辑操作,返回结果
    """
    for i in range(10): 
      time.sleep(0.5)
      self.signal.emit(str("hello world"+str(i))) # 发射信号


class MyWindows(QMainWindow, Ui_MainWindow):
  def __init__(self):
    super(MyWindows, self).__init__()
    self.setupUi(self)
    self.pushButton.clicked.connect(self.buttonClick)

  # 点击事件启动线程
  def buttonClick(self):
    self.thread = Example()
    self.thread.signal.connect(self.callback) #连接回调函数,接收结果
    self.thread.start() # 启动线程

  def callback(self, msg):
    self.lineEdit.setText(str(msg))


if __name__ == '__main__':
  app = QApplication(sys.argv)
  mywindow = MyWindows()
  mywindow.show()
  sys.exit(app.exec_())

点击之后显示会从1到9,逻辑运行在子线程,前端显示在主线程

PyQt5多线程防卡死和多窗口用法的实现

二、PyQt5多窗口用法

点击事件直接切换窗口

class MyWindows(QMainWindow, Ui_MainWindow):
  sig = pyqtSignal() #实例化信号

  def __init__(self):
    super(MyWindows, self).__init__()
    self.setupUi(self)
    self.pushButton.clicked.connect(self.slot_btn_function) #设定点击事件

  def slot_btn_function(self):
    # self.hide()
    self.f = Children() #第二个实例化UI
    self.f.show()

自定义信号和槽函数来打开第二个窗口

# -*- coding: UTF-8 -*-
""""=================================================
@Project -> File  :Django -> 二叉树之有序列表
@IDE  :PyCharm
@Author :爱跳水的温文尔雅的laughing
@Date  :2020/4/2 21:56
@Desc  :
=================================================="""
from PyQt5.QtCore import pyqtSignal, QThread
from PyQt5.QtWidgets import QWidget, QMainWindow, QApplication
from untitled import Ui_MainWindow
from children import Ui_Dialog
import sys

#第二个子窗口,当然子窗口也可以用多线程
class Children(QWidget, Ui_Dialog):
  def __init__(self):
    super(Children, self).__init__()
    self.setupUi(self)


#主窗口
class MyWindows(QMainWindow, Ui_MainWindow):
  sig = pyqtSignal() #实例化信号

  def __init__(self):
    super(MyWindows, self).__init__()
    self.setupUi(self)
    self.pushButton.clicked.connect(self.buttonClick) #设定点击事件
    self.sig.connect(self.signal_slot) #连接信号

  def buttonClick(self):
    self.sig.emit()

  #实例化第二个窗口
  def signal_slot(self):
    self.s = Children()
    self.s.show()


if __name__ == '__main__':
  app = QApplication(sys.argv)
  mywindow = MyWindows()
  mywindow.show()
  sys.exit(app.exec_())

PyQt5多线程防卡死和多窗口用法的实现

三、Pyqt5常用指令

1、设置btn不能被点击

True可以正常点击

self.btn.setEnable(False)

2、菜单按钮绑定事件

按钮绑定事件

self.btn.clicked.connect(self.test)

菜单action绑定事件

self.btn.trigged.connect(self.test)

3、QLabel标签

label = QLabel(self)
label.setText("显示内容") # 写入
text = label.text() # 读取

4、QTextEdit文本编辑器

text_edit = QTextEdit(self)
text_edit.setText(a) # 设置文本
text_edit.append(a) # 追加文本
text = text_edit.toPlainText() # 获取文本

5、QPushButton按键

button = QPushButton(self)
button .setChecked() # 设置为可选中
button.clicked.connect(clicked_function) # 按下触发

def clicked_function():
	pass

6、QCheckBox复选框和QRadioButton单选按钮

radio_button1.setChecked(True) # 设置选中,同时只能有一个选中
check_box.setCheckable(True) # 设置为可被选中

到此这篇关于PyQt5多线程防卡死和多窗口用法的实现的文章就介绍到这了,更多相关PyQt5多线程防卡死和多窗口用法内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python基础知识小结之集合
Nov 25 Python
整理Python 常用string函数(收藏)
May 30 Python
CentOS 7下Python 2.7升级至Python3.6.1的实战教程
Jul 06 Python
Python实现string字符串连接的方法总结【8种方式】
Jul 06 Python
对pycharm 修改程序运行所需内存详解
Dec 03 Python
用python实现刷点击率的示例代码
Feb 21 Python
Python实现时间序列可视化的方法
Aug 06 Python
Python读写文件模式和文件对象方法实例详解
Sep 17 Python
python numpy生成等差数列、等比数列的实例
Feb 25 Python
Python图像处理库PIL的ImageEnhance模块使用介绍
Feb 26 Python
pytorch训练神经网络爆内存的解决方案
May 22 Python
python numpy中multiply与*及matul 的区别说明
May 26 Python
PyQt5结合matplotlib绘图的实现示例
Sep 15 #Python
pycharm激活方法到2099年(激活流程)
Sep 22 #Python
pycharm专业版远程登录服务器的详细教程
Sep 15 #Python
深入浅析pycharm中 Make available to all projects的含义
Sep 15 #Python
pycharm-professional-2020.1下载与激活的教程
Sep 21 #Python
有关pycharm登录github时有的时候会报错connection reset的问题
Sep 15 #Python
Pycharm Git 设置方法
Sep 15 #Python
You might like
php 函数使用方法与函数定义方法
2010/05/09 PHP
使用Linux五年积累的一些经验技巧
2013/06/20 PHP
php防止sql注入示例分析和几种常见攻击正则表达式
2014/01/12 PHP
PHP实现支持SSL连接的SMTP邮件发送类
2015/03/05 PHP
详解WordPress开发中的get_post与get_posts函数使用
2016/01/04 PHP
PHP实现的限制IP投票程序IP来源分析
2016/05/04 PHP
PHP策略模式定义与用法示例
2017/07/27 PHP
php PDO属性设置与操作方法分析
2018/12/27 PHP
PHP使用phpunit进行单元测试示例
2019/09/23 PHP
jquery 为a标签绑定click事件示例代码
2014/06/23 Javascript
jQuery截取指定长度字符串的实现原理及代码
2014/07/01 Javascript
JavaScript中判断变量是数组、函数或是对象类型的方法
2015/02/25 Javascript
JS实现表单中checkbox对勾选中增加边框显示效果
2015/08/21 Javascript
vue图片加载与显示默认图片实例代码
2017/03/16 Javascript
jQuery 实时保存页面动态添加的数据的示例
2017/08/14 jQuery
vue 监听某个div垂直滚动条下拉到底部的方法
2018/09/15 Javascript
toString.call()通用的判断数据类型方法示例
2020/08/28 Javascript
浅谈Python类里的__init__方法函数,Python类的构造函数
2016/12/10 Python
使用Python绘制图表大全总结
2017/02/11 Python
Python建立Map写Excel表实例解析
2018/01/17 Python
解决Ubuntu pip 安装 mysql-python包出错的问题
2018/06/11 Python
在Python中字符串、列表、元组、字典之间的相互转换
2019/11/15 Python
python 字典访问的三种方法小结
2019/12/05 Python
解决python web项目意外关闭,但占用端口的问题
2019/12/17 Python
HTML5新增元素如何兼容旧浏览器有哪些方法
2014/05/09 HTML / CSS
基于html5 DeviceOrientation 实现微信摇一摇功能
2015/09/25 HTML / CSS
美国五金商店:Ace Hardware
2018/03/27 全球购物
数学教学随笔感言
2014/02/17 职场文书
法制宣传教育方案
2014/05/09 职场文书
泰山导游词
2015/02/02 职场文书
2015羊年春节慰问信
2015/02/14 职场文书
小学生读书笔记
2015/07/01 职场文书
2015年城乡环境综合治理工作总结
2015/07/24 职场文书
2016年主题党日活动总结
2016/04/05 职场文书
python3实现常见的排序算法(示例代码)
2021/07/04 Python
MySQL 条件查询的常用操作
2022/04/28 MySQL