pyqt使用css,PyQt样式与CSS类失败

我正在一个GUI中,我必须显示一些ToolButtons。 我正在使用外部CSS文件来设置它们的样式。 为了简化我定义的CSS类(使用setProperty),并使用CSS文件来根据类改变按钮的外观。PyQt样式与CSS类失败

我的Python代码如下所示:

...

bt = QtGui.QToolButton(parent.qtObject)

bt . setToolButtonStyle (QtCore.Qt.ToolButtonTextUnderIcon)

bt.setProperty('class','StaticButton')

bt.setStyleSheet(css_content)

...

我的CSS是这样的:

QToolButton.StaticButton

{

border: 2px solid #4f4f51;

border-radius: 5px;

font-size: 10px;

background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #e4e4c8, stop: 1 #b9b9a9);

}

的问题是,只有按钮的背景会受到影响。我尝试了许多替代方法,如CSS文件中的QToolButton[class=StaticButton]或.StaticButton。两种选择都导致了保存行为。 如果我直接套用CSS的按钮用:

bt.setStyleSheet("border: 2px solid #4f4f51;border-radius: 5px;font-size: 10px;background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #e4e4c8, stop: 1 #b9b9a9);")

所有作品完美,但我不希望有CSS在我的Python代码。

有人可以告诉我我的代码有什么问题吗?我不明白为什么使用背景属性,但不是其他的。

注意:我检查了导入的CSS文件是完全有效的。我做了几次测试,每次只有背景属性起作用......发生了什么?

感谢

2013-04-02

ibi0tux

PyQt使用 CSS 样式进行界面设计似于网页开发中的 CSS 应用方式,可以通过设置 Qt Widgets 的样式表(QSS, Qt Style Sheets)来实现丰富的界面外观。这种方式允许开发者通过似于 CSS 的语法来定义控件的样式,包括字体、颜色、背景、边框等。 ### 如何应用 CSS 样式PyQt 控件 可以使用 `setStyleSheet()` 方法将样式直接应用到单个控件或整个应用程序上。例如: ```python button = QPushButton("Click me") button.setStyleSheet("background-color: red; color: white; border: 1px solid black;") ``` 也可以为整个应用程序设置样式,以统一所有控件的外观: ```python app = QApplication([]) app.setStyleSheet("QPushButton { background-color: red; color: white; }") ``` ### 使用外部样式表文件 似于网页开发中的 CSS 文件,PyQt 支持从外部文件加载样式表,便于管理大型项目的样式。可以通过以下方式加载: ```python with open("style.qss", "r") as f: app.setStyleSheet(f.read()) ``` ### 样式选择器和属性 Qt Style Sheets 支持多种选择器,如型选择器(QPushButton)、选择器(.myButton)、ID 选择器(#myButton)等,并支持丰富的属性,如 `background-color`、`color`、`border`、`font-size` 等[^1]。 ### 样式继承子控件 某些控件可能包含子控件(如 `QComboBox` 的下拉箭头),可以通过特定的语法来设置子控件的样式: ```python comboBox = QComboBox() comboBox.setStyleSheet("QComboBox::drop-down { background-color: blue; }") ``` ### 实际示例 下面是一个简单的 PyQt5 应用程序示例,展示了如何使用样式表来美化界面: ```python import sys from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout app = QApplication(sys.argv) window = QWidget() layout = QVBoxLayout() button1 = QPushButton("Button 1") button2 = QPushButton("Button 2") button1.setStyleSheet("background-color: #4CAF50; color: white; padding: 10px; border-radius: 5px;") button2.setStyleSheet("background-color: #008CBA; color: white; padding: 10px; border-radius: 5px;") layout.addWidget(button1) layout.addWidget(button2) window.setLayout(layout) window.show() sys.exit(app.exec_()) ``` ### 注意事项 - Qt Style Sheets 并完全支持所有 CSS3 特性,但支持大部分常用的样式属性。 - 某些复杂的样式效果可能需要结合 Qt 的绘图功能实现。 - 使用样式表时需要注意性能问题,尤其是在大量控件或复杂界面中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值