PyQt5 – QStacked小工具

  • Post category:Python

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的用法,并在实际项目中应用这些知识。