PyQt中的样式表(QSS)类似于HTML中的CSS,用于定制Qt控件的外观和风格。以下是一些使用QSS的基本技巧和示例:
1. 基本语法
QSS的语法与CSS非常相似。你可以为特定的控件设置样式,也可以为整个应用程序设置全局样式。
# 设置单个控件的样式
button.setStyleSheet("""
QPushButton {
background-color: red;
color: white;
border: 2px solid black;
border-radius: 5px;
}
""")
# 设置全局样式
app.setStyleSheet("""
* {
font-size: 14px;
}
QPushButton {
background-color: blue;
}
""")
2. 使用伪状态
QSS支持伪状态,这允许你根据控件的状态(如悬停、按下等)来改变样式。
button.setStyleSheet("""
QPushButton {
background-color: red;
}
QPushButton:hover {
background-color: darkred;
}
QPushButton:pressed {
background-color: lightcoral;
}
""")
3. 层叠和继承
QSS中的样式是层叠的,这意味着后面的样式会覆盖前面的样式。此外,子控件会继承父控件的某些样式。
# 父控件样式
frame.setStyleSheet("""
QFrame {
background-color: yellow;
}
""")
# 子控件样式
button.setStyleSheet("""
QPushButton {
color: blue;
}
""")
4. 使用ID选择器
你可以为控件设置一个对象名称,然后使用ID选择器来引用它。
button.setObjectName("myButton")
button.setStyleSheet("""
#myButton {
background-color: green;
}
""")
5. 使用类选择器
类似于HTML,你可以定义一个样式类,然后在多个控件上重复使用它。
# 定义样式类
app.setStyleSheet("""
.warning-button {
background-color: orange;
color: black;
}
""")
# 应用样式类
button1.setStyleSheet(".warning-button")
button2.setStyleSheet(".warning-button")
6. 处理复杂布局
对于复杂的布局,可以使用嵌套的选择器来精确控制样式。
app.setStyleSheet("""
QGroupBox {
border: 1px solid gray;
margin-top: 10px;
}
QGroupBox::title {
subcontrol-origin: margin;
subcontrol-position: top center;
padding: 0 3px;
background-color: lightgray;
}
""")
7. 动态更新样式
你可以在运行时动态地更改控件的样式表。
def change_style():
button.setStyleSheet("""
QPushButton {
background-color: purple;
}
""")
button.clicked.connect(change_style)
注意事项
- QSS不支持所有的CSS属性,只支持Qt框架中定义的那些。
- 在设置全局样式时,要小心不要意外地覆盖了其他控件的重要样式。
- 使用QSS时,最好先在一个小的范围内测试样式,确保它们按预期工作。
通过这些技巧,你可以有效地使用QSS来定制PyQt应用程序的外观和用户体验。