PyQt - QStackedLayout



在 PyQt 中,QStackedLayout 类可用于构建与 QTabWidget 类似的用户界面。它还有一个便捷类,即基于 QStackedLayout 的 QStackedWidget 类。QTabWidget 类提供了一个选项卡式小部件的堆栈。

QStackedLayout 的用途

创建页面 − QStackedLayout 具有多个子小部件,每个页面以不同的方式运行。

# Building of Pages
firstPageWidget = QWidget()
secondPageWidget = QWidget()
thirdPageWidget = QWidget()
''' The method QStackedLayout() create a stack of widgets where only single 
widgets is visible at a time.'''
stackedLayout = QStackedLayout()
# Using addWidgets(), we can add the widgets to the end of the list.
stackedLayout.addWidget(firstPageWidget)
stackedLayout.addWidget(secondPageWidget)
stackedLayout.addWidget(thirdPageWidget)

请注意,QStackedLayout 类提供了一个小部件堆栈,其中一次只有一个小部件可见。

切换页面 − QStackedLayout 没有直接的方式供用户在页面之间切换。可以通过页面的标题来实现小部件的连接,即使用setCurrentIndex() 方法。

检索页面 − 我们有两种方法可以检索 QStackedLayout 类中的页面 −

  • currentIndex() − 显示在屏幕上的小部件的索引。
  • currentWidget() − 使用此方法可以显示实际的小部件。

使用 QStackedLayout 切换页面

QStackedLayout 中,页面切换是指从一个页面更改到另一个页面。在这里,我们将看到单击小部件时选项卡/页面的变化。

示例 1

以下示例演示了使用 PyQt 的各种布局函数进行页面切换的代码。

import sys
from PyQt6.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, 
QPushButton, QStackedLayout

class MyWindow(QMainWindow):
   def __init__(self):
      super().__init__()

      # Create the main window
      self.setWindowTitle("Page Switcher")
      self.setGeometry(200, 200, 600, 500)

      # Create the stacked layout
      self.stackedLayout = QStackedLayout()

      # Create Page 1
      self.page1Widget = QWidget()
      page1Layout = QVBoxLayout()
      page1Button = QPushButton("Go to Page 2")
      page1Button.clicked.connect(self.switch_to_page2)
      page1Layout.addWidget(page1Button)
      self.page1Widget.setLayout(page1Layout)

      # Create Page 2
      self.page2Widget = QWidget()
      page2Layout = QVBoxLayout()
      page2Button = QPushButton("Go to Page 1")
      page2Button.clicked.connect(self.switch_to_page1)
      page2Layout.addWidget(page2Button)
      self.page2Widget.setLayout(page2Layout)

      # Add pages to the stacked layout
      self.stackedLayout.addWidget(self.page1Widget)
      self.stackedLayout.addWidget(self.page2Widget)

      # Set the initial page
      self.stackedLayout.setCurrentIndex(0)

      # Set the central widget
      centralWidget = QWidget()
      centralWidget.setLayout(self.stackedLayout)
      self.setCentralWidget(centralWidget)

   def switch_to_page1(self):
      self.stackedLayout.setCurrentIndex(0)

   def switch_to_page2(self):
      self.stackedLayout.setCurrentIndex(1)

if __name__ == "__main__":
   app = QApplication(sys.argv)
   window = MyWindow()
   window.show()
   sys.exit(app.exec())

输出

上述代码产生以下输出 −

qstackedlayout

示例 2

在以下示例中,我们使用QPushButton()创建了两个按钮——上一页和下一页。然后我们使用 var_name.clicked.connect() 连接按钮范围。此函数允许用户单击范围之间的按钮。要设置布局,已使用QVBoxLayout()并使用主窗口显示结果。

from PyQt6.QtWidgets import QApplication, QWidget, QPushButton, QLabel, QVBoxLayout, 
QStackedLayout
app = QApplication([])

# Create main window
main_window = QWidget()
main_window.setWindowTitle("QStackedLayout")

# Create widgets
widget1 = QLabel("Widget 1")
widget2 = QLabel("Widget 2")
widget3 = QLabel("Widget 3")

# Create stacked layout and add widgets to it
stacked_layout = QStackedLayout()
stacked_layout.addWidget(widget1)
stacked_layout.addWidget(widget2)
stacked_layout.addWidget(widget3)

# Create navigation buttons
next_button = QPushButton("Next")
prev_button = QPushButton("Previous")

# Connect buttons to switch between widgets
next_button.clicked.connect(lambda: stacked_layout.setCurrentIndex(stacked_layout.currentIndex() + 1))
prev_button.clicked.connect(lambda: stacked_layout.setCurrentIndex(stacked_layout.currentIndex() - 1))

# Create a vertical layout for the main window
main_layout = QVBoxLayout(main_window)
main_layout.addLayout(stacked_layout)
main_layout.addWidget(prev_button)
main_layout.addWidget(next_button)

# Set the main layout for the main window
main_window.setLayout(main_layout)
main_window.show()
app.exec()

输出

执行代码后,我们将获得两个范围为 1-3 的按钮。

qstackedlayout Example Two
广告