重点:
使用Lambda往槽函数里面传递参数 self.pushButton().clicked.connect(lambda: 函数(args))
例:self.pushButton1.clicked.connect(lambda: self.change(self.pushButton1.objectName()))
其他方案:
1、pushButton、iframe、stackedWidget、stackedWidget.setCurrentIndex(0)
2、pushButton、tabWidget、tabWidget.setCurrentIndex(0)
左右两侧分别是一个frame控件,左侧frame里含有两个按钮,右侧其实我只是用来占位。选中两个frame,点击 Lay out Horizontally in Splitter,将它设置为 Splitter 布局,将 Splitter 拖大,将 两个frame 显示出来。
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file '.\frame2.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
from one import Ui_MainWindow as one
from two import Ui_MainWindow as two
from PyQt5.QtWidgets import *
class Ui_Frame_Two(object):
def setupUi(self, Frame_Two):
Frame_Two.setObjectName("Frame_Two")
Frame_Two.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(Frame_Two)
self.centralwidget.setObjectName("centralwidget")
self.splitter = QtWidgets.QSplitter(self.centralwidget)
self.splitter.setGeometry(QtCore.QRect(0, 0, 800, 550))
self.splitter.setOrientation(QtCore.Qt.Horizontal)
self.splitter.setObjectName("splitter")
self.frame1 = QtWidgets.QFrame(self.splitter)
self.frame1.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame1.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame1.setObjectName("frame1")
self.pushButton1 = QtWidgets.QPushButton(self.frame1)
self.pushButton1.setGeometry(QtCore.QRect(20, 70, 75, 23))
self.pushButton1.setObjectName("pushButton1")
self.pushButton2 = QtWidgets.QPushButton(self.frame1)
self.pushButton2.setGeometry(QtCore.QRect(20, 130, 75, 23))
self.pushButton2.setObjectName("pushButton2")
self.frame2 = QtWidgets.QFrame(self.splitter)
self.frame2.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame2.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame2.setObjectName("frame2")
Frame_Two.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(Frame_Two)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23))
self.menubar.setObjectName("menubar")
Frame_Two.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(Frame_Two)
self.statusbar.setObjectName("statusbar")
Frame_Two.setStatusBar(self.statusbar)
self.first = oneapp()
self.second = twoapp()
self.splitter.addWidget(self.first)
self.pushButton1.clicked.connect(lambda: self.change(self.pushButton1.objectName()))
self.pushButton2.clicked.connect(lambda: self.change(self.pushButton2.objectName()))
self.retranslateUi(Frame_Two)
QtCore.QMetaObject.connectSlotsByName(Frame_Two)
def retranslateUi(self, Frame_Two):
_translate = QtCore.QCoreApplication.translate
Frame_Two.setWindowTitle(_translate("Frame_Two", "MainWindow"))
self.pushButton1.setText(_translate("Frame_Two", "PushButton"))
self.pushButton2.setText(_translate("Frame_Two", "PushButton"))
def change(self, name):
dic={
self.pushButton1.objectName():self.first,
self.pushButton2.objectName():self.second
}
for objectName,pushButton in dic.items():
if name==objectName:
self.splitter.widget(1).setParent(None)
self.splitter.insertWidget(1,pushButton)
# if name == "pushButton1":
# self.splitter.widget(1).setParent(None)
# self.splitter.insertWidget(1, self.first)
#
# if name == "pushButton2":
# self.splitter.widget(1).setParent(None)
# self.splitter.insertWidget(1, self.second)
class oneapp(QMainWindow,one):
def __init__(self):
super(oneapp, self).__init__()
self.setupUi(self)
class twoapp(QMainWindow,two):
def __init__(self):
super(twoapp, self).__init__()
self.setupUi(self)
按需在文件中增加内容:
self.first = oneapp()
self.second = twoapp()
self.splitter.addWidget(self.first)
self.pushButton1.clicked.connect(lambda: self.change(self.pushButton1.objectName()))
self.pushButton2.clicked.connect(lambda: self.change(self.pushButton2.objectName()))
self.retranslateUi(Frame_Two)
QtCore.QMetaObject.connectSlotsByName(Frame_Two)
def retranslateUi(self, Frame_Two):
_translate = QtCore.QCoreApplication.translate
Frame_Two.setWindowTitle(_translate("Frame_Two", "MainWindow"))
self.pushButton1.setText(_translate("Frame_Two", "PushButton"))
self.pushButton2.setText(_translate("Frame_Two", "PushButton"))
def change(self, name):
dic={
self.pushButton1.objectName():self.first,
self.pushButton2.objectName():self.second
}
for objectName,pushButton in dic.items():
if name==objectName:
self.splitter.widget(1).setParent(None)
self.splitter.insertWidget(1,pushButton)
# if name == "pushButton1":
# self.splitter.widget(1).setParent(None)
# self.splitter.insertWidget(1, self.first)
#
# if name == "pushButton2":
# self.splitter.widget(1).setParent(None)
# self.splitter.insertWidget(1, self.second)
class oneapp(QMainWindow,one):
def __init__(self):
super(oneapp, self).__init__()
self.setupUi(self)
class twoapp(QMainWindow,two):
def __init__(self):
super(twoapp, self).__init__()
self.setupUi(self)