Python GUI库PyQt5图形和特效样式QSS介绍

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-colorcolor是两个属性,分别表示背景颜色和前景颜色。

属性的赋值方式

固定值,如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等组件和属性配合使用,实现更加丰富的视觉效果。

后端开发标签