PyQt5是基于Qt实现的Python GUI编程库。QStacked小工具是PyQt5中的一种窗口部件,可用于显示多个不同页面(或控件)之间的切换。使用QStacked小工具可以轻松实现复杂界面的设计,本文将介绍如何在PyQt5中使用QStacked小工具。
1. 创建一个QStackedWidget
在PyQt5中创建一个QStackedWidget可以通过如下代码实现:
from PyQt5.QtWidgets import QApplication, QStackedWidget, QWidget
app = QApplication([])
stacked_widget = QStackedWidget()
widget1 = QWidget()
widget2 = QWidget()
stacked_widget.addWidget(widget1)
stacked_widget.addWidget(widget2)
stacked_widget.setCurrentIndex(0)
stacked_widget.show()
app.exec_()
在上述代码中,创建了一个QStackedWidget实例,并添加了两个QWidget作为QStackedWidget的子控件。setCurrentIndex方法可以设置当前显示的子控件,0代表显示widget1,1代表显示widget2。最后调用show方法展示窗口并进入消息循环。
2. 切换子控件
使用QStackedWidget的切换子控件方法非常简单,只需调用setCurrentIndex方法即可,如:
stacked_widget.setCurrentIndex(1)
上述代码在QStackedWidget控件中切换为widget2。
示例1:创建多个页面窗口
以下代码演示如何使用QStackedWidget创建包含多个页面的窗口。
from PyQt5.QtWidgets import QApplication, QStackedWidget, QWidget, QVBoxLayout, QPushButton
app = QApplication([])
stacked_widget = QStackedWidget()
page_one = QWidget()
page_two = QWidget()
page_three = QWidget()
page_one_button = QPushButton('Go to Page Two')
page_two_button = QPushButton('Go to Page Three')
page_three_button = QPushButton('Go to Page One')
layout_one = QVBoxLayout()
layout_one.addWidget(page_one_button)
page_one.setLayout(layout_one)
layout_two = QVBoxLayout()
layout_two.addWidget(page_two_button)
page_two.setLayout(layout_two)
layout_three = QVBoxLayout()
layout_three.addWidget(page_three_button)
page_three.setLayout(layout_three)
stacked_widget.addWidget(page_one)
stacked_widget.addWidget(page_two)
stacked_widget.addWidget(page_three)
page_one_button.clicked.connect(lambda: stacked_widget.setCurrentIndex(1))
page_two_button.clicked.connect(lambda: stacked_widget.setCurrentIndex(2))
page_three_button.clicked.connect(lambda: stacked_widget.setCurrentIndex(0))
stacked_widget.show()
app.exec_()
上述代码创建了三个子控件:page_one、page_two、page_three,并分别添加一个QPushButton控件。然后,将这些子控件添加到QStackedWidget控件中。
在每个QPushButton的点击事件中,都调用setCurrentIndex方法,实现页面的切换。
示例2:实现Wizards
Wizards是一种使用QStackedWidget实现的向导式界面设计模式。以下代码演示如何使用QStackedWidget实现向导式界面的设计。
from PyQt5.QtWidgets import QApplication, QStackedWidget, QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QLabel
QtGui.QApplication.setStyle(QtGui.QStyleFactory.create('Cleanlooks'))
app = QApplication([])
stacked_widget = QStackedWidget()
page_one = QWidget()
page_two = QWidget()
page_three = QWidget()
label_one = QLabel('Page One')
label_two = QLabel('Page Two')
label_three = QLabel('Page Three')
next_button_one = QPushButton('Next')
next_button_two = QPushButton('Next')
finish_button = QPushButton('Finish')
back_button_two = QPushButton('Back')
back_button_three = QPushButton('Back')
layout_one = QVBoxLayout()
layout_one.addWidget(label_one)
layout_one.addWidget(next_button_one)
page_one.setLayout(layout_one)
layout_two = QVBoxLayout()
layout_two.addWidget(label_two)
layout_two.addWidget(next_button_two)
layout_two.addWidget(back_button_two)
page_two.setLayout(layout_two)
layout_three = QVBoxLayout()
layout_three.addWidget(label_three)
layout_three.addWidget(finish_button)
layout_three.addWidget(back_button_three)
page_three.setLayout(layout_three)
stacked_widget.addWidget(page_one)
stacked_widget.addWidget(page_two)
stacked_widget.addWidget(page_three)
next_button_one.clicked.connect(lambda: stacked_widget.setCurrentIndex(1))
next_button_two.clicked.connect(lambda: stacked_widget.setCurrentIndex(2))
back_button_two.clicked.connect(lambda: stacked_widget.setCurrentIndex(0))
back_button_three.clicked.connect(lambda: stacked_widget.setCurrentIndex(1))
finish_button.clicked.connect(app.quit)
stacked_widget.show()
app.exec_()
在上述代码中,创建了一个向导式界面,包括三个子控件page_one、page_two、page_three,分别包含了QLabel、QPushButton等控件。在向导式界面中,通过点击按钮实现页面的切换。
通过以上两个示例,您应该已经了解如何在PyQt5中使用QStacked小工具了。鼓励您尝试进一步熟悉QStackedWidget的用法,并在实际项目中应用这些知识。