1. PyQt5简介
PyQt5是一个基于Qt库的Python GUI框架。它可以通过调用Qt库提供的各种类和方法来构建便捷易用的GUI程序。同时,由于Qt库具有跨平台特性,PyQt5也继承了这一特性,因此可以在Windows、Linux、MacOS等多个操作系统上运行。
PyQt5的主要一些模块包括:
QtWidgets:提供各种GUI控件和相关功能,如布局、事件等
QtCore:提供核心非GUI相关功能,如时间、文件操作等
QtGui:提供绘制、字体、颜色等GUI相关的功能
QtWebEngineWidgets:提供Web浏览器功能
2. QSS介绍
QSS(Qt Style Sheets)是一种类似于CSS的样式表语言。通过QSS,可以对Qt控件的样式和外观进行修改。
QSS的优点:
可以通过一次创建一个样式,就能够使整个应用程序外观保持一致
与CSS语法类似,编写起来很方便
可以在运行时动态地修改样式的内容,从而实现视觉效果的即时更改
2.1 基本语法
QSS的基本单元是选择器和属性。选择器类似于CSS中的选择器,表示要应用样式的控件。
示例:
QPushButton {
background-color: blue;
color: white;
}
这里,QPushButton
选择器表示对所有QPushButton控件应用样式,同时,background-color
和color
是两个属性,分别表示背景颜色和前景颜色。
属性的赋值方式
固定值,如font-size: 16px;
控件当前状态下的值,如background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #f6f7fa, stop: 1 #dadbde);
其他属性或值的组合,如border: 2px solid red;
2.2 特效样式
QSS的一个重要应用是添加各种特效样式,如渐变、边框等。
2.2.1 渐变
线性渐变
线性渐变可以用qlineargradient()
函数来实现。这个函数包含多个参数,如x1、y1、x2、y2等,用来决定渐变的开始和结束位置。同时,可以通过stop属性来指定渐变颜色的断点,stop值为0表示起点颜色,1表示终点颜色。示例代码:
QPushButton {
background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #f6f7fa, stop: 1 #dadbde);
}
这里,渐变的起点是左上角,终点是左下角。颜色变化从白色(#f6f7fa)到灰色(#dadbde)
径向渐变
径向渐变可以用radialgradient()
函数来实现。这个函数也包含多个参数,如cx、cy、radius等,用来决定渐变的中心位置和半径。与线性渐变类似,还可以通过stop属性来指定渐变颜色的断点。示例代码:
QPushButton {
background-color: qradialgradient(cx: 0.5, cy: 0.5, radius: 0.5, fx: 0.25, fy: 0.25, stop: 0 #f6f7fa, stop: 1 #dadbde);
}
这里,渐变的中心位置是整个按钮的中心,半径是按钮宽度的一半。同时,fx和fy参数定义了焦点位置,这里表示渐变色在按钮的左上角。
2.2.2 边框
在QSS中,可以通过border
属性来定义控件的边框。可以指定边框的宽度、颜色和样式(实线、虚线、点线等)。示例代码:
QPushButton {
border: 2px solid gray;
border-radius: 5px;
}
这里,边框宽度是2px,颜色是灰色。同时,还指定了边框的圆角弧度是5px。
3. PyQt5中的QSS应用
在PyQt5中,可以通过调用QApplication的setStyleSheet()
方法来设置全局样式。同时,每个控件还可以单独指定样式。
3.1 设置全局样式
在设置全局样式时,可以通过直接把QSS样式字符串传递给setStyleSheet()
方法来实现。
import sys
from PyQt5.QtWidgets import QApplication, QLabel
if __name__ == '__main__':
app = QApplication(sys.argv)
app.setStyleSheet('''
QLabel {
background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #f6f7fa, stop: 1 #dadbde);
border: 2px solid gray;
border-radius: 5px;
font-size: 20px;
}
''')
label = QLabel('Hello, PyQt5')
label.show()
sys.exit(app.exec_())
这个例子中,整个应用程序中所有QLabel控件的背景颜色都是线性渐变,同时还包含了2px宽的灰色实线边框和5px圆角。字体大小是20px。这是全局设置,即每个QLabel都会应用这些样式。
3.2 单独设置控件样式
在某些情况下,可能需要单独对一个控件应用特定的样式,而不影响其他控件。这时,可以用控件的setStyleSheet()
方法来实现。
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton
if __name__ == '__main__':
app = QApplication(sys.argv)
widget = QWidget()
widget.resize(200, 100)
btn = QPushButton('Hello, PyQt5!', widget)
btn.move(50, 50)
btn.setStyleSheet('''
QPushButton {
background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #f6f7fa, stop: 1 #dadbde);
border: 2px solid gray;
border-radius: 5px;
font-size: 20px;
}
''')
widget.show()
sys.exit(app.exec_())
这里,我们创建了一个QWidget窗口,然后往窗口中添加了一个QPushButton控件。随后,通过setStyleSheet()
方法,将该按钮的样式设置为线性渐变、2px宽的灰色实线边框和5px圆角。字体大小是20px。这个设置只对当前按钮有效。
4. 总结
在PyQt5中,使用QSS可以轻松地实现各种特效样式。通过掌握其基本语法和属性,以及一些重要的特效样式,可以快速定制出与众不同的GUI应用程序。在实际应用中,我们还可以通过与QPalette、QFont等组件和属性配合使用,实现更加丰富的视觉效果。