【PyQt5篇】和子线程进行通信

2024-04-07 22:20

本文主要是介绍【PyQt5篇】和子线程进行通信,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 🍔使用QtDesigner进行设计
  • 🛸和子线程进行通信
    • 🎈运行结果

🍔使用QtDesigner进行设计

我们首先使用QtDesigner设计界面
在这里插入图片描述
在这里插入图片描述

得到代码login.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"><class>Form</class><widget class="QWidget" name="Form"><property name="geometry"><rect><x>0</x><y>0</y><width>478</width><height>220</height></rect></property><property name="windowTitle"><string>Form</string></property><widget class="QLabel" name="label"><property name="geometry"><rect><x>20</x><y>30</y><width>72</width><height>15</height></rect></property><property name="text"><string>用户名:</string></property></widget><widget class="QLabel" name="label_2"><property name="geometry"><rect><x>21</x><y>74</y><width>71</width><height>21</height></rect></property><property name="text"><string>密码:</string></property></widget><widget class="QTextBrowser" name="textBrowser"><property name="geometry"><rect><x>215</x><y>20</y><width>201</width><height>91</height></rect></property></widget><widget class="QPushButton" name="pushButton"><property name="geometry"><rect><x>10</x><y>150</y><width>93</width><height>28</height></rect></property><property name="text"><string>登录</string></property></widget><widget class="QPushButton" name="pushButton_2"><property name="geometry"><rect><x>140</x><y>150</y><width>93</width><height>28</height></rect></property><property name="text"><string>忘记密码</string></property></widget><widget class="QLineEdit" name="lineEdit"><property name="geometry"><rect><x>80</x><y>30</y><width>113</width><height>21</height></rect></property></widget><widget class="QLineEdit" name="lineEdit_2"><property name="geometry"><rect><x>80</x><y>70</y><width>113</width><height>21</height></rect></property></widget></widget><resources/><connections/>
</ui>

🛸和子线程进行通信

import json
import sys
import timefrom PyQt5 import uic
from PyQt5.QtCore import QThread, pyqtSignal
from PyQt5.QtWidgets import QApplication, QWidgetclass LoginThread(QThread):#创建自定义信号start_login_signal=pyqtSignal(str)def __init__(self):super().__init__()def login_by_requests(self,user_password_json):# 将json字符串转换为自定义字符串,实现传递用户名和密码# json.loads()方法能够将符合JSON格式的字符串转换为Python的字典或列表等数据类型。user_password_json=json.loads(user_password_json)print(user_password_json.get("user_name"))print(user_password_json.get("password"))def run(self):# 让子线程一直存活,便于接收来自主线程的任务while True:print("子线程正在执行")time.sleep(1)
class MyWindow(QWidget):def __init__(self):super().__init__()self.init_ui()def init_ui(self):self.ui=uic.loadUi("./login.ui")self.user_name=self.ui.lineEditself.password=self.ui.lineEdit_2self.login_btn=self.ui.pushButtonself.forget_btn=self.ui.pushButton_2self.text_Browser=self.ui.textBrowser  #文本显示区域# 创建一个子线程self.login_thread=LoginThread()# 绑定信号和槽函数self.login_btn.clicked.connect(self.login)    #点击后,调用login函数# 将要创建的子线程类中的信号进行绑定# 写下self.login_thread = LoginThread()时,实际上是调用了LoginThread类,并创建了一个该类的实例对象,并将其赋值给了self.login_thread变量。# 简而言之,self.login_thread就是LoginThread()这个类的一个实例。# 当start_login_signal信号被触发时,就会自动调用login_by_requests方法来进行登录操作。self.login_thread.start_login_signal.connect(self.login_thread.login_by_requests)# 让子线程开始工作self.login_thread.start()def login(self):# 登录按钮的槽函数user_name=self.user_name.text()password=self.password.text()# 发送信号给子线程self.login_thread.start_login_signal.emit(json.dumps({"user_name":user_name,"password":password}))if __name__=='__main__':app=QApplication(sys.argv)w=MyWindow()w.ui.show()app.exec_()

🎈运行结果

在这里插入图片描述

这篇关于【PyQt5篇】和子线程进行通信的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/883833

相关文章

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

使用Python进行文件读写操作的基本方法

《使用Python进行文件读写操作的基本方法》今天的内容来介绍Python中进行文件读写操作的方法,这在学习Python时是必不可少的技术点,希望可以帮助到正在学习python的小伙伴,以下是Pyth... 目录一、文件读取:二、文件写入:三、文件追加:四、文件读写的二进制模式:五、使用 json 模块读写

使用zabbix进行监控网络设备流量

《使用zabbix进行监控网络设备流量》这篇文章主要为大家详细介绍了如何使用zabbix进行监控网络设备流量,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录安装zabbix配置ENSP环境配置zabbix实行监控交换机测试一台liunx服务器,这里使用的为Ubuntu22.04(

在Pandas中进行数据重命名的方法示例

《在Pandas中进行数据重命名的方法示例》Pandas作为Python中最流行的数据处理库,提供了强大的数据操作功能,其中数据重命名是常见且基础的操作之一,本文将通过简洁明了的讲解和丰富的代码示例,... 目录一、引言二、Pandas rename方法简介三、列名重命名3.1 使用字典进行列名重命名3.编

使用PyQt5编写一个简单的取色器

《使用PyQt5编写一个简单的取色器》:本文主要介绍PyQt5搭建的一个取色器,一共写了两款应用,一款使用快捷键捕获鼠标附近图像的RGB和16进制颜色编码,一款跟随鼠标刷新图像的RGB和16... 目录取色器1取色器2PyQt5搭建的一个取色器,一共写了两款应用,一款使用快捷键捕获鼠标附近图像的RGB和16

python安装完成后可以进行的后续步骤和注意事项小结

《python安装完成后可以进行的后续步骤和注意事项小结》本文详细介绍了安装Python3后的后续步骤,包括验证安装、配置环境、安装包、创建和运行脚本,以及使用虚拟环境,还强调了注意事项,如系统更新、... 目录验证安装配置环境(可选)安装python包创建和运行Python脚本虚拟环境(可选)注意事项安装

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后