在上一篇文章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的对象列表

对象 类型
lineEdit LlineEdit
pushButton QPushButto

untitled1.ui的对象列表

对象 类型
label QLabel

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):

  问题

        在MyMainFormbutton点击时会发出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):
            # 获取行编辑文本
        labelStr= self.lineEdit.text()
        self.sendText.emit(labelStr)



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,labelStr):
        self.label.setText(labelStr)



# 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(labelStr)

          在该项目功能需求中,需要获取MyMainFormlineEdit的内容,将其内容传递传递MyMainForm1的deal_signal,并在deal_signal对MyMainForm1的文本设置需要填写参数类型str”,如果自定义信号不需要传递内容,则不需要参数数据类型如下代码即可

sendText = pyqtSignal()

最终实现

         

原文地址:https://blog.csdn.net/qq_34343637/article/details/134664215

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_46252.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注