【Python】PyQt5 从父窗口中打开子窗口,并向父窗口传递子窗口的信号以及数据。

一、父窗口中打开子窗口

1.1 用QtDesigner设计子窗口界面

在这里插入图片描述

用PyUIC转化为.py文件
在这里插入图片描述

1.2 编写主窗口函数

方法一:

1、在主窗口中创造一个类,继承子窗口的页面
在这里插入图片描述
2、在主窗口函数中实例化子窗口类
在这里插入图片描述
3、信号槽连接,将按钮和子窗口连接起来(pushButton_6)
在这里插入图片描述
4、在打开子窗口函数中显示
在这里插入图片描述
5、在主窗口运行函数中定义
在这里插入图片描述

方法二:(推荐)

1、在转化好的子窗口.py文件中,写初始化函数,并继承QMainWindow类,同时,在初始化函数里调用页面布局以及显示函数setupUi以及retranslateUi

在这里插入图片描述
2、在主窗口类初始化中,实例化子窗口(否则子窗口和父窗口都会闪退)
在这里插入图片描述
3、同样进行信号槽连接,以及子窗口显示函数

在这里插入图片描述在这里插入图片描述
4. 结束

二、子窗口向父窗口传递信号以及数据

2.1 定义信号

在子窗口类中定义信号,其中,()中可以是需要传递的多个参数的数据类型,可以是int,str等等。

class Ui_configure(QDialog, object):
    # 定义信号
    _signal = QtCore.pyqtSignal()
    # _signal = QtCore.pyqtSignal(str,str)  # 多个参数可以用','隔开

2.2 发射信号

这里使用按钮进行发射,将按钮和发射信号的槽函数连接。当按钮被按下时,发射信号。

# 信号槽连接函数
def signalSlotConnection(self):
       self.pushButton_confirm.clicked.connect(self.onConfirmClick)

# 标注按钮按下时执行
def onConfirmClick(self):
    print("confirm")
    # self.measureNum = self.spinBox_measureNum.value()
    # self.motorNum = self.spinBox_motorNum.value()
    # 发射信号
    self._signal.emit()
    # 如果需要传递参数,则在括号中传入参数即可。
    # self._signal.emit(data_str1, data_str2)

2.3 父窗口接收

在打开子窗口的函数中接收信号和参数,接收到信号时,执行self.addLabel操作

# 打开 参数配置 窗口
def fireupConfig(self):
    self.ChildConfigure.show()
    self.ChildConfigure._signal.connect(self.addLabel)
def addLabel(self):
    ...
    print("接收到信号")

如果是传了参数过来,则执行的函数要有对应的接收参数的数量。

def addLabel(self, par1, par2):
    ...
    print("接收到信号,参数1=" + par1 + ",参数2=" + par2)

三、参考

PyQt5:从父窗口打开子窗口,并向父窗口传递数据

  • 6
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值