Python-PySide6主窗口调用子窗口并互相传递参数(完善)

两个不同class调用彼此变量,关键在Signal、emit与connect槽函数应用。

MainWinGUI.py


from PySide6 import QtWidgets, QtCore, QtGui
from PySide6.QtWidgets import *
import sys
 
from Ui_MainWindow import Ui_MainWindow
from ChildWinGUI import ChildForm



class MainForm(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super(MainForm, self).__init__()    #ChildForm
        self.setupUi(self)                # 函数定义来自MainWinGUI.py
 
        # 这里的ChildForm()是我们创建子窗口类
        # 我们将其命名为OurNewWindow
        self.OurNewWindow = ChildForm()  # 子窗口实例化
 
        # 调用子窗口,并向子窗口传递参数
        # 方法 1
        self.SendButton_1.clicked.connect(self.CallChildWin)
        self.SendButton_2.clicked.connect(self.CallChildWin)
 

    def CallChildWin(self):
        #初始化子窗口
        # self.OurNewWindow.init_Ui()
        # 显示子窗口
        self.OurNewWindow.show()

        # 连接信号
        self.OurNewWindow.param_signal.connect(self.display_params)
     
        # 使用sender()获取当前按键名称判断是 Send1 还是 Send2
        if self.sender().text() == 'Send1':     # name is bn name
            self.OurNewWindow.btn_num = 1
        else:
            self.OurNewWindow.btn_num = 2



    #     # 方法 2,使用lambda传递自定义参数
    #     self.SendButton_1.clicked.connect(lambda: self.CallChildWin(1))
    #     self.SendButton_2.clicked.connect(lambda: self.CallChildWin(2)) 

    # def CallChildWin(self, num):
    #     # 初始化子窗口
    #     # self.OurNewWindow.init_Ui()
    #     # 显示子窗口
    #     self.OurNewWindow.show()
    #     # 连接信号
    #     self.OurNewWindow.param_signal.connect(self.display_params)

    #     # 根据传入的实参来赋值btn_num
    #     if num == 1:
    #         self.OurNewWindow.btn_num = 1
    #     else:
    #         self.OurNewWindow.btn_num = 2



    def display_params(self, arg1, arg2, arg3, arg4):
        # 显示
        self.textBrowser.setText("This is sent from \"Send%d\"" % arg4)
        self.textBrowser.append("The shape is: %s" % arg1)
        self.textBrowser.append("Length = : %d" % arg2)
        self.textBrowser.append("Width = : %f" % arg3)
        


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

ChildWinGUI.py

from PySide6 import QtWidgets, QtCore, QtGui
from PySide6.QtCore import Signal
from PySide6.QtWidgets import *
import sys

from Ui_ChildWindow import Ui_Child_MainWindow


class ChildForm(QMainWindow, Ui_Child_MainWindow):
    
    # 定义信号
    param_signal = Signal(str, int, float, int)  # 分别对应shape Length Width num
    
    def __init__(self):
        super(ChildForm, self).__init__()
        # self.setupChildUi(self)            # 函数定义来自ChildWinGUI.py
        self.setupUi(self)                # 函数定义来自MainWinGUI.py
        self.retranslateUi(self)           # 函数定义来自ChildWinGUI.py
 
        # 定义按键序号
        self.btn_num = 0
 
        # 绑定信号和槽
        self.Save_button.clicked.connect(self.save_func)
 
    def save_func(self):
        in_type = self.lineEdit_rec.text()        # 读取shape输入
        in_length = int(self.lineEdit_l.text())   # 读取length输入
        in_width = float(self.lineEdit_w.text())  # 读取witdth输入
        in_num = self.btn_num                     # 读取按键编号
     
        # 发送信号
        self.param_signal.emit(in_type, in_length, in_width, in_num)
     
        # 保存后关闭子窗口
        self.close()

需要用例,详见https://download.csdn.net/download/tao0599/87943474

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值