python之pyqt专栏7-信号与槽3

news2024/9/24 11:26:00

        在上一篇文章中python之pyqt专栏6-信号与槽2-CSDN博客中,我们可以了解到对象可以使用内置信号,这些信号来自于类定义或者继承过来的。我们可以对这些信号可以通过connect连接槽函数。

需求

        现在有一个需求,有两个UI界面“untitled.ui”和“untitled1.ui”,untitled.ui有一个lineEdit(行编辑)和一个button(按钮),untitled1.ui有一个Label。点击untitled.ui的button时,将行编辑的文本内容,设置为untitled1.uiLabel文本内容。

untitled.ui的对象列表

对象名类型
lineEditLlineEdit
pushButtonQPushButto

untitled1.ui的对象列表

对象名类型
labelQLabel

UI界面设置

untitled.ui  UI界面

       保存文件为untitled.ui

untitled1.ui  UI界面

        点击左上角“文件”->“新建”

        保存文件为untitled.ui 

         注:Qt Designer中,当有两个以上的UI编辑界面时,需要先选中的UI界面,再保存

 项目目录下“untitled.ui”“untitled1.ui”转换为“untitled.py”“untitled1.py”

main.py

# 导入sys模块
import sys
# PyQt6.QtWidgets模块中导入QApplication, QWidget
from PyQt6.QtWidgets import QApplication, QWidget
from PyQt6.QtCore import QObject

import untitled
import untitled1

class MyMainForm(QWidget, untitled.Ui_Form):
    sendText = pyqtSignal(str)
    def __init__(self, parent=None):
        # 调用父类的构造函数
        super(MyMainForm, self).__init__(parent)
        # 调用继承Ui_Form过来的setupUi函数
        self.setupUi(self)
        self.pushButton.clicked.connect(self.btn_clicked)



class MyMainForm1(QWidget, untitled1.Ui_Form):
    def __init__(self, parent=None):
        # 调用父类的构造函数
        super(MyMainForm1, self).__init__(parent)
        # 调用继承Ui_Form过来的setupUi函数
        self.setupUi(self)
        self.move(1200,320)


# Press the green button in the gutter to run the script.
if __name__ == '__main__':
    # 实例化应用
    app = QApplication(sys.argv)
    # 实例化MyMainForm
    myw = MyMainForm()
    myw.show()
    myw1 = MyMainForm1()
    myw1.show()
    myw.sendText.connect(myw1.deal_signal)

    # 启动应用程序的事件循环并等待用户交互,直到应用程序关闭。
    sys.exit(app.exec())

        防止两个窗口重叠,在MyMainForm1移动一下位置

self.move(1200,320)

  

        有两个窗口,建立了两个类MyMainFormMyMainForm1,它们分别继承于untitled.Ui_Formuntitled1.Ui_Form

        需要注意的是untitled.py与untitled1.py都有Ui_Form,为了区分Ui_Form来源,不能用如下代码,否者会被Ui_Form会被后面的取代

from untitled import Ui_Form
from untitled1 import Ui_Form

         正确书写应该是这样

import untitled
import untitled1
class MyMainForm(QWidget, untitled.Ui_Form):
class MyMainForm1(QWidget, untitled1.Ui_Form):

  问题

        在MyMainForm,button被点击时会发出clicked信号,如果用将buttonclicked信号,绑定槽函数,在这个槽函数里面可以实现获取lineEdit的文本内容,代码如下

self.pushButton.clicked.connect(self.btn_clicked)
    def btn_clicked(self):
        # 获取行编辑文本
        str = self.lineEdit.text()

        MyMainForm与MyMainForm1,它们是两个类,没有直接关系这个槽函数在MyMainForm中,不能修改MyMainForm1的label,也就是不能通过如下代码

    def btn_clicked(self):
        # 获取行编辑文本
        str = self.lineEdit.text()
        self.label.setText(str)

 自定义信号

          如果我们可以在untitled.pyUi_Form自定义一个信号(sendText),这个信号通过connect绑定untitled1.pyUi_Form类函数(deal_signal),那么它们就会建立关系。

 myw.sendText.connect(myw1.deal_signal)
修改代码如下

# 导入sys模块
import sys
# PyQt6.QtWidgets模块中导入QApplication, QWidget
from PyQt6.QtWidgets import QApplication, QWidget
from PyQt6.QtCore import QObject, pyqtSignal


import untitled
import untitled1

class MyMainForm(QWidget, untitled.Ui_Form):
    sendText = pyqtSignal(str)
    def __init__(self, parent=None):
        # 调用父类的构造函数
        super(MyMainForm, self).__init__(parent)
        # 调用继承Ui_Form过来的setupUi函数
        self.setupUi(self)
        self.pushButton.clicked.connect(self.btn_clicked)

    def btn_clicked(self):
            # 获取行编辑文本
        str = self.lineEdit.text()
        self.sendText.emit(str)



class MyMainForm1(QWidget, untitled1.Ui_Form):
    def __init__(self, parent=None):
        # 调用父类的构造函数
        super(MyMainForm1, self).__init__(parent)
        # 调用继承Ui_Form过来的setupUi函数
        self.setupUi(self)
        self.move(1200,320)
    def deal_signal(self,str):
        self.label.setText(str)



# Press the green button in the gutter to run the script.
if __name__ == '__main__':
    # 实例化应用
    app = QApplication(sys.argv)
    # 实例化MyMainForm
    myw = MyMainForm()
    myw.show()
    myw1 = MyMainForm1()
    myw1.show()
    myw.sendText.connect(myw1.deal_signal)

    # 启动应用程序的事件循环并等待用户交互,直到应用程序关闭。
    sys.exit(app.exec())
      自定义信号过程
      1)导入 pyqtSignal类 
from PyQt6.QtCore import  pyqtSignal
        2)定义类中信号属性,“str”是参数
sendText = pyqtSignal(str)
      3)信号与槽绑定
myw.sendText.connect(myw1.deal_signal)
       4)发送信号

self.sendText.emit(str)

          在该项目功能需求中,需要获取MyMainFormlineEdit的内容,将其内容传递传递给MyMainForm1的deal_signal,并在deal_signal对MyMainForm1的文本设置,因此需要形参“str”,如果自定义信号不需要传递内容,则不需要添形参,如下代码即可

sendText = pyqtSignal()

最终实现

         

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1263660.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信小程序开发——项目开发入门

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 概述 本文重点介绍微信小程序开发者工具的下载与安装与项目开发入门。 下载开发者工具 请在官方网站下载微信小程序开发工具;图示如下: 请依据实际…

基于mvc的大学生家教信息网站系统php+vue

运行环境:phpstudy/wamp/xammp等 开发语言:php 后端框架:Thinkphp5 前端框架:vue.js 服务器:apache 数据库:mysql 数据库工具:Navicat/phpmyadmin 开发软件:hbuilderx/vscode/Dreamweaver/PhpSt…

[SaaS] 淘宝AI淘淘秀

AIGC技术在淘淘秀场景的探索与实践关键词:图像类AI创新应用、用户轻松创作、内容分享、结合商家品牌。https://mp.weixin.qq.com/s/-3a3_nKeKGON-9-Prd7JKQ 1.生成模版 利用定制的prompt,生成一些比较好的素材图片案例。 最终的用的是通义万相。 2.仿…

不会代码也能拿高薪?掌握面试法宝,轻松10000+

快速排序(Quicksort)是对冒泡排序的一种改进。 快速排序由 C.A.R.Hoare 在 1962 年提出。 它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后…

基于springBoot+mysql实现的竞赛管理系统

基于springBootmysql实现的竞赛管理系统,演示地址:系统登录 - 软件学院比赛管理系统 管理员账号:1,密码:1 包括比赛管理,队伍管理,教师管理,经费管理,学生管理,比赛结果,…

《2023全球隐私计算报告》正式发布!

2023全球隐私计算报告 1、2023全球隐私计算图谱2、国内外隐私计算相关政策3、隐私计算技术的最新发展4、隐私计算技术的合规挑战5、隐私计算的应用市场动态6、隐私计算开源整体趋势7、隐私计算的未来趋势 11月23日,由浙江省人民政府、商务部共同主办,杭州…

银行各类计算公式汇总

一、存款准备金 存款准备金,分为法定存款准备金和超额存款准备金(主要构成是存放央行及现金,不包括存放同业资金)。下表为目前最新的各类银行业金融机构存款准备金水平。 法定存款准备金率是指中央银行规定的,存款性…

有没有不含亚硫酸盐的葡萄酒?

没有完全不含亚硫酸盐的葡萄酒,有机葡萄酒和生物动力葡萄酒中也会含有少量天然 亚硫酸盐。因为它是在发酵过程中产生的一种化合物,所以不可能酿造无亚硫酸盐的葡萄酒。 在大多数葡萄酒国家都有葡萄酒法律规定,如果葡萄酒超过特定的亚硫酸盐水…

Node.js 事件循环:定时任务、延迟任务和 I/O 事件的艺术

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

使用 watch+$nextTick 解决Vue引入组件无法使用问题

问题描述: 很多时候我们都需要使用第三方组件库,比如Element-UI,Swiper 等等。 如果我们想要在这些结构中传入自己从服务器请求中获取的数据就会出现无法显示的问题。 比如我们在下面的Swiper例子中,我们需要new Swiper 才能让…

WordPress自动采集伪原创发布工具

在当今数字化时代,随着信息爆炸式增长,网站内容的更新速度飞快。对于拥有WordPress网站的用户而言,如何轻松而又快速地批量采集伪原创内容成为一项具有挑战性的任务。本文将专心分享一些方法和技巧,帮助WordPress用户实现批量采集…

python学习过程中一些问题记录总结

工作机器上安装了 两个环境 使用anaconda3 时配置仓库地址不能 拉取到 cv2 DBUtils 使用python2 时 版本低,拉取不到 解决办法,python2不支持下载最新版本的,需要指定下载一个老的版本即可,下个1.3的就OK了 pip install DBU…

【随笔】OpenFlow概述

SDN之前的网络结构 硬件 操作系统 网络功能(交换机、路由器、防火墙、VPN、NAT、OSPF、BGP、Traffic Engineering) 北向是SDN应用 SDN控制器 底层是SDN数据面(通用硬件) openflow OPEN NETWORKING FOUNDATION 支持开放的SDN平台,一直使用的是openflow协议。 op…

Vue 双向数据绑定

之前通过v-bind来完成的数据绑定&#xff0c;属性值和表达式进行绑定&#xff0c;表达式的值发生变化了属性值也跟着发生变化。 单向数据绑定&#xff1a; <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>首页</titl…

rss服务搭建记录

layout: post title: RSS subtitle: vps搭建RSS服务 date: 2023-11-27 author: Sprint#51264 header-img: img/post-bg-universe.jpg catalog: true tags: - 折腾 文章目录 引言RSShub-dockerRSS-radarFreshrssFluent reader获取fever api配置Fluent Reader同步 结语 引言 一个…

ArrayList源码全面解析

一、概述 ArrayList 是 java 集合框架中比较常用的数据结构,继承自 AbstractList&#xff0c;实现了 List 接口。底层采用数组来实现。ArrayList 实现了java.io.Serializable接口&#xff0c;这意味着ArrayList支持序列化&#xff0c;能通过序列化去传输。 1.1、底层数据结构…

从 Rust 程序员的早期使用印象看 Go

Go vs Rust 我在过去的几周开始使用 Go。这是我第一次在一个较大且严肃的项目中使用 Go。之前我对 Go 有过很多了解&#xff0c;并且在研究 Rust 的特性时&#xff0c;曾经使用例子和玩具程序。然而&#xff0c;真正的编程经验是完全不同的。 我认为写写我对它的印象会很有趣。…

Java(九)(多线程,线程安全,实现线程的方法,线程同步,线程池,并发和并行,线程的六种状态)

目录 多线程 线程 实现线程的方法 方法一:继承Thread父类 方法二:实现Runnable接口 方法三:Callable接口和FutureTask类来实现 Thread方法 线程安全 线程同步 同步代码块 同步方法 Lock锁 线程池 线程池对象的创建方式一: 线程池处理Runnable任务 线程池处理Cal…

办公软件定制开发在企业发展中的优势|app小程序搭建

办公软件定制开发在企业发展中的优势|app小程序搭建 如今&#xff0c;办公软件已经成为企业日常工作的必需品。很多企业为了提高工作效率和满足自身业务需要&#xff0c;选择定制开发办公软件。下面将介绍定制开发办公软件在企业发展中的优势。 1定制开发办公软件可以满足企业…

uni-app 微信小程序 pdf预览

<div click"getPDF">查看体检报告</div>getPDF() {uni.downloadFile({url: ${this.$baseURL}/file/download?id${this.pdfFileId},//编写在线的pdf地址success: function(res) {const filePath res.tempFilePath;uni.openDocument({filePath: filePath…