返回

解决 Python Qt Designer TableView 滑条样式设置后失效问题

前端

使用 Scroll Area 解决 TableView 滑条样式失效问题

问题

在使用 Python Qt Designer 设计 GUI 界面时,您可能遇到一个恼人的问题:在 TableView 组件中设置滑条的样式后,这些样式会失效。这可能会让您感到沮丧,因为您无法自定义滑条的外观以匹配您的应用程序主题。

原因

这个问题的根源在于 Qt Designer 自身的限制。在 TableView 组件中,您无法直接设置滑条的样式。相反,您必须使用一种巧妙的解决方法来解决此问题。

解决方法

解决此问题的关键在于使用 Scroll Area 组件。Scroll Area 允许您创建带有滚动条的自定义区域。通过将 TableView 组件添加到 Scroll Area 中,您可以有效地间接控制滑条的样式。

步骤:

  1. 在 Qt Designer 中,创建 Scroll Area 组件。
  2. 将 TableView 组件添加到 Scroll Area 中。
  3. 对于 TableView,将 ScrollBarPolicy 属性设置为 Qt.ScrollBarAlwaysOff 以隐藏 Scroll Area 的默认滚动条。
  4. 在 TableView 中,找到 ScrollBar 属性并将其设置为 QScrollBar
  5. 最后,在 QScrollBar 中,设置您想要的样式。

示例代码

import sys
from PyQt5.QtWidgets import *

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

        self.scroll_area = QScrollArea()
        self.scroll_area.setWidgetResizable(True)
        self.scroll_area.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.scroll_area.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)

        self.table_view = QTableView()
        self.table_view.setStyleSheet("background: transparent;")

        self.scroll_area.setWidget(self.table_view)

        self.setCentralWidget(self.scroll_area)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    app.exec_()

常见问题解答

问:为什么 Scroll Area 需要将 Border 属性设置为 "0px groove g"?

答:这将消除 Scroll Area 周围的边框,使其看起来更像是 TableView 本身的一部分。

问:为什么 TableView 的 Background 属性需要设置为 "transparent"?

答:这将允许 TableView 的内容显示在 Scroll Area 之上,从而创建自定义滚动条的错觉。

问:我仍然无法在 TableView 中看到我的自定义样式。

答:请确保您在 QScrollBarStyle 属性中正确设置了样式。您还可以尝试重新启动 Qt Designer 以清除任何缓存设置。

问:我可以使用 QAbstractScrollArea 来代替 Scroll Area 吗?

答:是的,QAbstractScrollArea 是 Scroll Area 的父类,您也可以使用它来解决此问题。

问:还有其他方法可以自定义 TableView 滑条的样式吗?

答:另一种方法是使用 CSS 样式表来设置滑条的样式。但是,这需要更多的编码知识。

结论

通过使用 Scroll Area,您可以绕过 Qt Designer 的限制,在 TableView 组件中自定义滑条的样式。这将使您能够创建具有吸引力和响应性的 GUI 界面。