pyqt5实现多个窗口之间的切换

0 引言

在网上找了半天无果, 网上的大多数达到了"看似合理"的切换效果, 其实深究下来会发现是 在槽函数内部生成了多个窗口,随着每一次的按钮单击都会重新生成窗口,根本不是自己要的结果。所以记录一下,以便以后查阅

1 利用自定义信号处理窗口切换

话不多说, 先上代码

# @author   :xxxxxx
# @FileName :main.py
# @Date     :2019/12/30
# @Time     :21:34
# @Program  :PYCHARM


import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget
from PyQt5.QtCore import pyqtSignal
from form1 import Ui_Form
from main_window import Ui_MainWindow


class MainWin(QMainWindow, Ui_MainWindow):
    show_sub_win_signal = pyqtSignal()  # 该信号用于展示子窗体

    def __init__(self):
        super().__init__()
        self.setupUi(self)

    def go_sub(self):
        self.show_sub_win_signal.emit()


class SubWin(QWidget, Ui_Form):
    # 自定义信号
    show_main_win_signal = pyqtSignal()  # 该信号用于展示主窗体

    def __init__(self):
        super(SubWin, self).__init__()
        self.setupUi(self)

    def setInfo(self):
        self.textEdit.setText("测试中")

    def go_main(self):
        self.show_main_win_signal.emit()


def show_sub():
    subWin.show()
    myWin.hide()


def show_main():
    myWin.show()
    subWin.hide()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    myWin = MainWin()
    myWin.show()
    subWin = SubWin()
    myWin.show_sub_win_signal.connect(show_sub)
    subWin.show_main_win_signal.connect(show_main)
    sys.exit(app.exec_())

由于界面部分由设计器生成,就不贴出了。
这里只贴出了主要逻辑代码。
主窗体和子窗体在单击转换窗口的按钮时,会发出对应信号,再由外界槽函数处理即可。

结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值