宽度、高度和边距在 PySide6 中的 QT 样式 Sheet 中不起作用

Width, Height, and Margin doesn't work in QT Style Sheet in PySide6

所以我有一个名为 main.qss 的 Qt 样式 Sheet,样式 sheet 我正在尝试设置宽度和高度,但它不起作用,它只是保持不变。同样的事情也发生在边距上。

这是 QSS:

QFrame#mainFrame {
    background-color: #282C34;
}

QFrame#menuFrame {
    background-color: #21252B;
}

QPushButton.menuButton {
    background-color: #21252B;

    padding-left: 12px;
    padding-top: 1px;
    padding-bottom: 1px;

    border: 0;
    font-family: "Times New Roman";
    font-size: 20pt;

    color: #FFFFFF;

    width: 300pt; <-- Problem here
    height: 15px; <-- Problem here
}

QPushButton.menuButton:hover {
    background-color: #282C34;
}

QPushButton.menuButton:pressed {
    background-color: #BD93F9;
}

这是我的 QPushButton:

self.menu_toggle_button = QtWidgets.QPushButton(self.menu_frame)
self.menu_toggle_button.setIcon(QtGui.QPixmap("menu_icons/menu.png"))
self.menu_toggle_button.setText("  Hide")
self.menu_toggle_button.setObjectName("menuToggleButton")
self.menu_toggle_button.setProperty("class", "menuButton")
self.menu_toggle_button.setIconSize(QtCore.QSize(20, 20))

那我做错了什么?

我知道这是可行的,因为在 Qt Style Sheet 参考中,可以在这里找到:https://doc.qt.io/qtforpython-6/overviews/stylesheet-reference.html?highlight=stylesheet,它说 QPushButtton 支持宽度、高度和边距。

您的样式表不起作用有两个原因:

  1. width(和height)属性通常不适用于小部件,但仅适用于子控件,如explained in the docs:

Warning: Unless otherwise specified, this property has no effect when set on widgets. If you want a widget with a fixed width, set the min-width and max-width to the same value.

  1. “点”分隔符在 python 中不起作用,但在 css 中起作用:它是 class selector:

.QPushButton          Matches instances of QPushButton, but not of its subclasses.

如果你想匹配objectName属性,你需要ID选择器:

    QPushButton#menuButton {...}

考虑到虽然 Qt 样式表支持这些属性,但通常最好将这些设置留给布局管理器并直接使用小部件函数(setFixedSize()setFixedWidth()setFixedHeight()).

最后,边距不起作用,因为您正在使用 填充。 Qt 使用与 CSS 相同的概念也用于 Box Model:

因此,您设置的内边距位于按钮的 bordercontent(图标 and/or文本,即 QStyle SE_PushButtonContents 子元素)。您要查找的是 边距.