在使用 QtPy(一个提供 PyQt 和 PySide 统一接口的库)时,可以通过不同的方式实现页面跳转。一般来说,页面跳转是指在应用程序中切换不同的界面或窗口。下面是几种常见的方法来实现这一功能。

方法 1: 使用 QStackedWidget

QStackedWidget 允许你在多个页面之间切换,这是一种常见的方式来实现页面跳转。

示例代码


import sys
from qtpy.QtWidgets import QApplication, QMainWindow, QStackedWidget, QPushButton, QWidget, QVBoxLayout, QLabel

class PageOne(QWidget):
    def __init__(self, switch_page):
        super().__init__()
        layout = QVBoxLayout()
        layout.addWidget(QLabel("This is Page One"))
        button = QPushButton("Go to Page Two")
        button.clicked.connect(lambda: switch_page(1))
        layout.addWidget(button)
        self.setLayout(layout)

class PageTwo(QWidget):
    def __init__(self, switch_page):
        super().__init__()
        layout = QVBoxLayout()
        layout.addWidget(QLabel("This is Page Two"))
        button = QPushButton("Go to Page One")
        button.clicked.connect(lambda: switch_page(0))
        layout.addWidget(button)
        self.setLayout(layout)

class MyWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Page Navigation Example")

        self.stacked_widget = QStackedWidget()
        self.setCentralWidget(self.stacked_widget)

        self.page_one = PageOne(self.switch_page)
        self.page_two = PageTwo(self.switch_page)

        self.stacked_widget.addWidget(self.page_one)
        self.stacked_widget.addWidget(self.page_two)

        self.stacked_widget.setCurrentIndex(0)  # Start on Page One

    def switch_page(self, page_index):
        self.stacked_widget.setCurrentIndex(page_index)

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

代码说明

1、创建页面类: PageOne 和 PageTwo 是两个不同的页面,包含一个标签和一个按钮。

2、创建主窗口: MyWindow 类是主窗口,包含一个 QStackedWidget。

3、切换页面: switch_page 方法用于切换到指定索引的页面。

4、初始化: 在 __main__ 中创建应用实例并显示主窗口。

方法 2: 使用多个窗口

你还可以通过创建多个窗口来实现页面跳转。以下是一个简单的示例:

示例代码


import sys
from qtpy.QtWidgets import QApplication, QMainWindow, QPushButton, QLabel, QWidget, QVBoxLayout

class PageOne(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Page One")
        self.setGeometry(100, 100, 300, 200)

        layout = QVBoxLayout()
        layout.addWidget(QLabel("This is Page One"))

        button = QPushButton("Go to Page Two")
        button.clicked.connect(self.open_page_two)
        layout.addWidget(button)

        container = QWidget()
        container.setLayout(layout)
        self.setCentralWidget(container)

    def open_page_two(self):
        self.page_two = PageTwo()
        self.page_two.show()  # 打开 Page Two 窗口
        self.close()  # 关闭当前窗口

class PageTwo(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Page Two")
        self.setGeometry(100, 100, 300, 200)

        layout = QVBoxLayout()
        layout.addWidget(QLabel("This is Page Two"))

        button = QPushButton("Go to Page One")
        button.clicked.connect(self.open_page_one)
        layout.addWidget(button)

        container = QWidget()
        container.setLayout(layout)
        self.setCentralWidget(container)

    def open_page_one(self):
        self.page_one = PageOne()
        self.page_one.show()  # 打开 Page One 窗口
        self.close()  # 关闭当前窗口

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = PageOne()
    window.show()
    sys.exit(app.exec_())

小结

通过以上两种方法,你可以在 QtPy 应用中实现页面跳转。