PySide6自定义信号与槽实现两个窗口之前数据传递

一、自定义信号的总体流程

1、定义信号

2、定义槽函数

3、连接信号与槽函数

4、发射信号

二、子窗口与主窗口的设置流程如下:

 

显示效果:将输入的用户名:admin,密码:123456显示在label中

 

三、demo代码如下:

import sys

from PySide6.QtCore import *
from PySide6.QtWidgets import *

# 主窗口
class MainUi(QWidget):
    def __init__(self,parent=None):
        super(MainUi, self).__init__(parent)
        self.setWindowTitle('第一个窗口')
        self.resize(500,300)
        self.open_btn = QPushButton('打开')
        self.username = QLabel('默认文本')
        self.box = QHBoxLayout()
        self.box.addWidget(self.open_btn)
        self.box.addWidget(self.username)
        self.setLayout(self.box)
        self.open_btn.clicked.connect(self.get_data)

    # 实例化子窗口并获取子窗口返回数据
    def get_data(self):
        child_win = ChildWin()
        child_win.name_signal.connect(self.set_to_text)
        child_win.exec()

    # 传入用户名和密码并设置到显示框中
    def set_to_text(self,name,passwd):
        self.username.setText('用户名:{},密码:{}'.format(name,passwd))


# 子窗口
class ChildWin(QDialog):
    name_signal = Signal(str,str)       # 子窗信号,用于传递用户名
    def __init__(self,parent=None):
        super(ChildWin, self).__init__(parent)
        self.setWindowTitle('子窗口')
        self.resize(400,200)
        layout = QHBoxLayout()
        name = QLabel('用户名:')
        passwd = QLabel('密码:')
        self.namele = QLineEdit()
        self.passwdle = QLineEdit()
        self.commit_btn = QPushButton('提交')
        layout.addWidget(name)
        layout.addWidget(self.namele)
        layout.addWidget(passwd)
        layout.addWidget(self.passwdle)
        layout.addWidget(self.commit_btn)
        self.setLayout(layout)
        self.commit_btn.clicked.connect(self.get_name)      # 关连信号发信槽函数

    # 定义槽函数,用于获取用户名并发射信号
    def get_name(self):
        user_name = self.namele.text()      # 获取输入的用户名
        password = self.passwdle.text()     # 获取密码
        self.name_signal.emit(user_name,password)        # 发射信号
        self.close()    # 发射完信号后关闭窗口


if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = MainUi()
    win.show()
    sys.exit(app.exec())

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值