我想在 PyQt5 中使用style sheet來布局自定義小部件。通常這是可行的:小部件與修改后的屬性一起顯示。然而,小部件的屬性(例如style-sheet font-familyvs. QLabel.label())似乎保持默認值(s. 下面的最小示例)。樣式表是否僅用于繪制小部件而不更改小部件本身?有沒有辦法獲得“新”屬性?否則,例如FontMetrics與 a 結合使用style sheet是不可能的?import sysfrom PyQt5.QtWidgets import QApplication, QLabelfrom PyQt5.QtGui import QFontInfostylesheet = '''QLabel{ font-family: Wingdings;}'''app = QApplication(sys.argv)label = QLabel('Hello World!')label.setStyleSheet(stylesheet)print(QFontInfo(label.font()).family()) # prints out: MS Shell Dlg 2; expected: Wingdingslabel.show()app.exec()
1 回答

達令說
TA貢獻1821條經驗 獲得超6個贊
您的懷疑確實是正確的:使用樣式表時,許多小部件屬性都被忽略了,無論是對于它們的 getter 還是 setter。
沒有直接的方法可以知道這些值,因為它們都是由 Qt 的解析器在內部管理的。
最重要的是,palette()
and font()
(fontMetrics()
顯然)不受影響,因此您無法知道樣式表使用的字體屬性或調色板顏色是什么,如果您嘗試設置字體或設置新調色板,您將不會結果(所有這一切都假設您實際上在樣式表中設置了一些顏色或字體,顯然)。
這也適用于其他小部件特定屬性(例如,QFrame 邊框樣式),它們甚至可能在不同樣式/系統(tǒng)上產生略微不同的結果。
這也是您應該使用樣式表或 QPalette 的原因,因為混合它們可能會導致意外行為。
來自QWidget.palette()
文檔:
警告:不要將此功能與 Qt 樣式表一起使用。
來自QWidget.font()
文檔:
注意:如果 Qt 樣式表與 setFont() 在同一個小部件上使用,如果設置沖突,樣式表將優(yōu)先。
添加回答
舉報
0/150
提交
取消