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_())

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

结果

pyqt5实现多个窗口之间的切换_第1张图片
pyqt5实现多个窗口之间的切换_第2张图片
pyqt5实现多个窗口之间的切换_第3张图片

你可能感兴趣的:(pyqt5)