python pyqt6单窗口多界面实现
pyqt6 简单窗口
1.首先,我们先来实现一个简单的窗口
class Example4(QWidget):
def __init__(self):
super(Example4, self).__init__()
self.init()
def init(self):
# 部件显示方法一,定义父类
label = QLabel("标签1", parent=self)
# 部件显示方法二,不定义父类
label2 = QLabel("标签2")
hbox = QHBoxLayout()
hbox.addWidget(label2)
self.setLayout(hbox)
self.setFixedSize(300, 150)
self.setWindowTitle("测试4")
self.show(
pp = QApplication(sys.argv)
ex4=Example4()
sys.exit(app.exec())
实现效果如下:
2.这里我们注意label标签的显示,如果后面没有parent=self这个参数,就需要我们把部件放在布局中,然后通过给父类部件设置布局的方式来添加这个部件。
单窗口多界面的实现方式
这里多界面以左右两个界面为例。在左界面中有两个按钮。按钮1和按钮2,点击按钮1切换到右界面1,点击按钮2切换到右界面2.
窗口隐藏
1.主窗口套子窗口
这种方法需要我们在QMainWindow部件下实现。
1.我们定义一个主窗口,一个左窗口,和两个右窗口。
2.设置QMainWindow的中心部件为主窗口,默认布局为水平布局QHBoxLayout。
def __init__(self):
super(Example, self).__init__()
self.main_layout = QHBoxLayout()
self.main_widget = QWidget()
self.main_widget.setLayout(self.main_layout)
self.left_widget = QWidget()
self.right_wight = QWidget()
self.right_wight2 = QWidget()
self.initui()
3.在主窗口的水平布局里面添加左窗口和右窗口,并设置第二个右窗口为隐藏。
def initui(self):
self.init_left()
self.init_right()
self.main_layout.addWidget(self.left_widget)
self.main_layout.addWidget(self.right_wight)
self.main_layout.addWidget(self.right_wight2)
self.right_wight2.hide()
self.setCentralWidget(self.main_widget) # 设置窗口主部件 ,注意,没有设置主部件,QMainWindows 里面所有部件将不会显示
# 固定大小300x150
self.setFixedSize(300, 150)
self.setWindowTitle("测试")
self.show()
4.设置左窗口的布局为垂直布局QVBoxLayout,并向其添加两个按钮,按钮1和按钮2。定义按钮1的功能为隐藏右窗口2,显示右窗口1(如果有其他更多的窗口,同理只显示窗口1就行)
def init_left(self):
# 左窗口2个按钮
btn1 = QPushButton("按钮1")
btn2 = QPushButton("按钮2")
btn1.clicked.connect(self.switch_to_r1)
btn2.clicked.connect(self.switch_to_r2)
vbox = QVBoxLayout()
vbox.addWidget(btn1)
vbox.addWidget(btn2)
self.left_widget.setFixedSize(150,150)
self.left_widget.setLayout(vbox)
5.右窗口也设置其布局为垂直布局,并添加标签。
def init_right(self):
# 右窗口1
label1 = QLabel("标签1")
vbox = QVBoxLayout()
vbox.addWidget(label1)
self.right_wight.setLayout(vbox)
# 右窗口2
label2 = QLabel("标签2")
vbox2 = QVBoxLayout()
vbox2.addWidget(label2)
self.right_wight2.setLayout(vbox2