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 相关文章推荐
paramiko模块安装和使用(远程登录服务器)
Jan 27 Python
Python正则抓取新闻标题和链接的方法示例
Apr 24 Python
解决pycharm回车之后不能换行或不能缩进的问题
Jan 16 Python
利用Tensorflow构建和训练自己的CNN来做简单的验证码识别方式
Jan 20 Python
使用Python爬虫库requests发送表单数据和JSON数据
Jan 25 Python
PyCharm 无法 import pandas 程序卡住的解决方式
Mar 09 Python
Python3+selenium实现cookie免密登录的示例代码
Mar 18 Python
python上selenium的弹框操作实现
Jul 13 Python
python下载的库包存放路径
Jul 27 Python
关于pycharm 切换 python3.9 报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 的问题
Nov 24 Python
Python何绘制带有背景色块的折线图
Apr 23 Python
python数字图像处理数据类型及颜色空间转换
Jun 28 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中mysql模块部分功能的简单封装
2011/09/30 PHP
回帖脱衣服的图片实现代码
2014/02/15 PHP
PHPMailer的主要功能特点和简单使用说明
2014/02/17 PHP
THINKPHP2.0到3.0有哪些改进之处
2015/01/04 PHP
php通过array_merge()函数合并关联和非关联数组的方法
2015/03/18 PHP
两款万能的php分页类
2015/11/12 PHP
JS控件autocomplete 0.11演示及下载 1月5日已更新
2007/01/09 Javascript
用jquery与css打造个性化的单选框和复选框
2010/10/20 Javascript
js中巧用cssText属性批量操作样式
2011/03/13 Javascript
js同比例缩放图片的小例子
2013/10/30 Javascript
jquery实现文本框的禁用和启用
2016/12/07 Javascript
Bootstrap中glyphicons-halflings-regular.woff字体报404错notfound的解决方法
2017/01/19 Javascript
a标签置灰不可点击的实现方法
2017/02/06 Javascript
node.js利用redis数据库缓存数据的方法
2017/03/01 Javascript
angular bootstrap timepicker TypeError提示怎么办
2017/06/13 Javascript
Three.js利用orbit controls插件(轨道控制)控制模型交互动作详解
2017/09/25 Javascript
vue使用vue-i18n实现国际化的实现代码
2018/04/08 Javascript
JS实现的A*寻路算法详解
2018/12/14 Javascript
微信小程序的引导页实现代码
2020/06/24 Javascript
vue-router为激活的路由设置样式操作
2020/07/18 Javascript
vue插件--仿微信小程序showModel实现模态提示窗功能
2020/08/19 Javascript
PHP webshell检查工具 python实现代码
2009/09/15 Python
一些常用的Python爬虫技巧汇总
2016/09/28 Python
python取数作为临时极大值(极小值)的方法
2018/10/15 Python
对python自动生成接口测试的示例讲解
2018/11/30 Python
python字符串格式化方式解析
2019/10/19 Python
Python语法垃圾回收机制原理解析
2020/03/25 Python
python中pop()函数的语法与实例
2020/12/01 Python
完美解决Pycharm中matplotlib画图中文乱码问题
2021/01/11 Python
CSS3制作hover下划线动画
2017/03/27 HTML / CSS
市场营销专科应届生求职信
2013/11/24 职场文书
如何写自我鉴定
2014/03/19 职场文书
我的梦想演讲稿1000字
2014/08/21 职场文书
五一劳动节慰问信
2015/02/14 职场文书
行政答辩状范文
2015/05/21 职场文书
教师素质教育心得体会
2016/01/19 职场文书