pyside6--多窗口编程

前言

欢迎来到我的博客

个人主页:北岭敲键盘的荒漠猫-CSDN博客

本文主要整理pyside进行多窗口的制作

主要方法

制作多窗口主要得益于以下几个关键函数。

函数方法
show()打开窗口
close()关闭窗口(再打开后出现在默认位置)
hide()隐藏窗口(再打开的时候在隐藏时的位置)

代码案例

代码演示:

#引入窗口的基本库
from PySide6.QtWidgets import QApplication,QWidget
#引入我们的文件(win是我们生成的py文件)
from win import Ui_Form
from subwin import Ui_Form as Ui2
#定义窗口类
class Mainwindow(QWidget,Ui_Form):
    def __init__(self): #继承窗口和win文件中的Ui_From类
        super().__init__()
        self.setupUi(self)#导入UI文件
        self.subwin=Subwin()
        self.pushButton_3.clicked.connect(self.bindShow)
        self.Close.clicked.connect(self.bindClose)
        self.Hide.clicked.connect(self.bindHide)

    def bindShow(self):
        self.subwin.show()
    def bindClose(self):
        self.subwin.close()
    def bindHide(self):
        self.subwin.hide()


class Subwin(QWidget,Ui2):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
    def showit(self):
        self.show()
    def closeit(self):
        self.close()
    def hideit(self):
        self.hide()


if __name__=="__main__":
    app=QApplication([])#开启,传参
    windows=Mainwindow()#实例化对象
    windows.show()#显示窗口
    app.exec()#循环监听

效果演示:

上述代码利弊

上述代码比较简洁的直接在主窗口中定义了一个子窗口的对象。

但是这个有个问题。

我们如果主窗口跟子窗口都需要互相通信的话,主窗口实例化子窗口,子窗口实例化主窗口。

这样主窗口实例子窗口的时候,子窗口的代码又会实例化主窗口,主窗口又会执行实例化子窗口的代码。子子孙孙无穷尽也。

这时候就需要用一些特殊的方法来实现主窗口与子窗口之间的相互通信。

主子窗口的相互方法调用

首先导入这个库

from PySide6.QtCore import Signal

子窗口设置一个信号

sendValueToMain=Signal(str)

之后再__init__中设置一个父窗口的参数传递进入,并且实例化

    def __init__(self,parent=None):
        super().__init__()
        self.parent=parent

最后修改一下父窗口实例化子窗口的代码,把自己作为父窗口的参数传到里面。

self.subwin=Subwin(self)

最终代码如下

#引入窗口的基本库
from PySide6.QtWidgets import QApplication,QWidget
from PySide6.QtCore import Signal
#引入我们的文件(win是我们生成的py文件)
from win import Ui_Form
from subwin import Ui_Form as Ui2
#定义窗口类
class Mainwindow(QWidget,Ui_Form):
    def __init__(self): #继承窗口和win文件中的Ui_From类
        super().__init__()
        self.setupUi(self)#导入UI文件
        self.subwin=Subwin(self)
        self.pushButton_3.clicked.connect(self.bindShow)
        self.Close.clicked.connect(self.bindClose)
        self.Hide.clicked.connect(self.bindHide)

    def bindShow(self):
        self.subwin.show()
    def bindClose(self):
        self.subwin.close()
    def bindHide(self):
        self.subwin.hide()


class Subwin(QWidget,Ui2):
    sendValueToMain=Signal(str)
    def __init__(self,parent=None):
        super().__init__()
        self.parent=parent
        self.setupUi(self)
        self.pushButton.clicked.connect(self.botton)


    def showit(self):
        self.show()
    def closeit(self):
        self.close()
    def hideit(self):
        self.hide()

    def botton(self):
        self.parent.textEdit.setText("主窗口成功的接收到了子窗口的信号")


if __name__=="__main__":
    app=QApplication([])#开启,传参
    windows=Mainwindow()#实例化对象
    windows.show()#显示窗口
    app.exec()#循环监听

这样就能实现父子窗口之间的通信了。

 

父子窗口的信号传递

上面那个方法主要是我们用来相互调用方法,但我们想要做另一个功能。

我们在子窗口也添加一个文本框,我们把子窗口的文本框的内容传递给主窗口的文本框。

这样的话我们该怎么操作。

绑定信号

我们已经创建了信号

现在绑定好父窗口的相关控件,然后按钮绑定自己的控件

这样我们一点按钮,他就会激活这个信号,给上面绑定的方法传入我们的参数

    def botton_bind(self):
        self.sendValueToMain.connect(self.parent.textEdit.setText)
        self.pushButton.clicked.connect(self.send_info)

    def send_info(self):
        print("run")
        self.sendValueToMain.emit(self.textEdit.toPlainText())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北岭敲键盘的荒漠猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值