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_())
由于界面部分由設計器生成,就不貼出了。
這裡隻貼出了主要邏輯代碼。
主窗體和子窗體在單擊轉換視窗的按鈕時,會發出對應信号,再由外界槽函數處理即可。
結果
