【问题标题】:PyQt/PySide QMainWindow - switching between viewsPyQt/PySide QMainWindow - 在视图之间切换
【发布时间】:2025-12-23 02:15:10
【问题描述】:

您好 PyQt/PySide 专家,

我是 PyQt/PySide 和桌面应用程序开发的新手(我是一名网络开发人员)。

我有一个关于如何在 PyQt/PySide 应用程序的不同视图之间导航的问题。

假设我的应用具有“TEST1”(默认)和“TEST2”视图(即类似于 Web 应用中的页面),我想通过单击相应的工具栏项在它们之间切换。

我认为每次单击工具栏按钮时我都可以使用 QMainWindow.setCentralWidget() 来设置请求的视图,但这是在 PyQt/PySide 中的不同视图之间导航的正常方式吗?

为了您的参考,我将发布一个示例代码来说明上述内容:

#!/usr/bin/env python

import sys
from PySide import QtCore
from PySide.QtCore import *
from PySide.QtGui import *

class MainWindow(QMainWindow):

    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)

        # toolbar action 1
        self.test1_action = QAction(QIcon('icons/test1.png'), 'Test 1', self)
        self.test1_action.triggered.connect(self.show_test1_view)

        # toolbar action 2
        self.test2_action = QAction(QIcon('icons/test2.png'), 'Test 2', self)
        self.test2_action.triggered.connect(self.show_test2_view)

        # create toolbar
        self.toolbar = self.addToolBar('Actions')
        self.toolbar.addAction(self.test1_action)
        self.toolbar.addAction(self.test2_action)

        # default view is test1, so call the method to set the central widget to "test1" view.
        self.show_test1_view()

    # switch to "test1" view - just a simple label here.
    def show_test1_view(self):
        self.test1_view = QLabel('TEST1 VIEW')
        self.setCentralWidget(self.test1_view)

    # switch to "test2" view - just a simple label here.
    def show_test2_view(self):
        self.test2_view = QLabel('TEST2 VIEW')
        self.setCentralWidget(self.test2_view)

app = QApplication(sys.argv)

window = MainWindow()
window.show()

app.exec_()
sys.exit()

提前谢谢你...!

【问题讨论】:

    标签: python pyqt pyside


    【解决方案1】:

    stackedwidget 可能会成功

    【讨论】:

    • 您好,感谢您指出这一点!我已经看过它了,它确实适合我的目的。但是像我这样的应用程序使用 StackedWidget 事实标准吗?在像我这样的情况下,您通常会使用什么?谢谢!
    • @Sacki :我确实使用 StackedWidget,我不知道它是否是任何类型的“标准”,但它必须存在是有原因的。而且我认为它存在的原因是在需要时使用...... :)
    • 您好,感谢您的回复,很抱歉我花了很长时间才回复您。我一定会试一试的。再次感谢!
    最近更新 更多