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