天天看點

pyqt5實作多個視窗之間的切換0 引言1 利用自定義信号處理視窗切換結果

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實作多個視窗之間的切換0 引言1 利用自定義信号處理視窗切換結果
pyqt5實作多個視窗之間的切換0 引言1 利用自定義信号處理視窗切換結果
pyqt5實作多個視窗之間的切換0 引言1 利用自定義信号處理視窗切換結果