为 QFrame 中的小部件设置相同的边距

Setting same margin for widgets in QFrame

我在 QFrame 中有两个小部件 class。第一个小部件是 QTabWidget,下一个是按钮。我试图为按钮设置上边距。我试图通过将 Qpushbutton 的 margin-top 设置为负值来更新它,但它没有用。我试图将顶部的按钮对齐,与标签栏的高度相同

.

class TableTreeItemChild(QFrame):
    """Component for showing child widget of tree item"""

    def __init__(self, dbData, urlDBIndex):
        super(TableTreeItemChild, self).__init__()

        self.urlDBIndex = urlDBIndex

        self.tableTreeTab = TableTreeTab(dbData)

        self.setupUI()

    def setupUI(self):
        """Setting up the component"""
        mainLayout = QHBoxLayout()
        mainLayout.setContentsMargins(0, 0, 0, 0)

        mainLayout.addWidget(self.tableTreeTab)

        exportButton = QPushButton("")
        exportButton.setIcon(QIcon("assets/icons/export_icon_16.png"))
        exportButton.setStyleSheet("QPushButton{border: 1px solid #e1e1e1; padding:5px; border-radius:4px; } ")
        exportButton.setGeometry(0, -100, 10, 10)
        exportButton.clicked.connect(self.onExportButtonClick)

        mainLayout.addWidget(exportButton)

        self.setFixedWidth(800)
        self.setLayout(mainLayout)

以上代码的当前输出为:

当前输出:

为了在布局中将小部件对齐到顶部,必须提供 alignment 参数。
请记住 addWidget() 具有三个参数(强制性小部件、stretch 和对齐方式),因此如果您未指定拉伸,则必须对对齐方式进行关键字处理:

mainLayout.addWidget(exportButton, alignment=QtCore.Qt.AlignTop)

三个注意事项:

  1. 在添加到布局的小部件上设置几何图形是没有用的,因为布局会根据情况自动更改小部件的几何图形;
  2. Qt 中的样式表不如“web”先进CSS:它们仅适用于小部件属性,并且它们不是(也不应该)允许控制定位、调整大小或对齐;
  3. 虽然对齐会将您的小部件置于顶部,但无法保证它与其他小部件完全对齐,这是由于 Qt 绘制的方式所致元素:可以有一些变通办法,但它们并非在所有情况下都是 100% 安全的;如上所述,Qt 样式表仅覆盖单个小部件的外观,不涉及正常的布局 CSS,因为布局管理器(QLayout 子类)对此负责并且它们不支持样式表;