PyQt5 – 为进度条设置皮肤

  • Post category:Python

PyQt5是一个用于创建GUI程序的Python工具集,其中包含了多种控件,例如进度条。此外,为了满足GUI设计的需求,PyQt5还内置了一些主题和皮肤,可由用户自定义。以下是针对进度条如何设置皮肤的完整使用攻略。

1. 导入PyQt5模块

在导入模块前,需要先安装PyQt5。可以使用pip安装:

pip install pyqt5

导入PyQt5模块的常规方式如下:

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *

以上语句导入了PyQt5中的用于显示GUI的部分widgets和GUI的部分graphics。

2. 创建和设置进度条

在创建进度条前,先设置一些必要的外观属性。以下是两个示例:

示例1:创建一个样式为QStyleFactory中第3个皮肤的横向进度条

progressbar = QProgressBar()
progressbar.setGeometry(50, 50, 200, 25)
progressbar.setOrientation(Qt.Horizontal)
progressbar.setStyleSheet(QStyleFactory.create('WindowsVista').make_stylesheet())

在这个示例中:

  • setGeometry() 用于设置进度条的位置和大小;

  • setOrientation() 用于设置进度条的方向,Qt.Horizontal表示横向进度条,Qt.Vertical表示纵向进度条;

  • setStyleSheet() 用于设置进度条的样式,其中 QStyleFactory.create() 返回的是以某个模板为基础的皮肤,make_stylesheet() 则可以把返回的皮肤设置成CSS。

示例2:创建一个样式为Windows Vista的圆形进度条

progressbar = QProgressBar()
progressbar.setGeometry(50, 50, 100, 100)
progressbar.setOrientation(Qt.Vertical)
progressbar.setObjectName("myRoundProgressBar")
progressbar.setStyleSheet("""
QProgressBar#myRoundProgressBar {
    border: 2px solid grey;
    border-radius: 50px;
    background-color: white;
}

QProgressBar#myRoundProgressBar::chunk {
    background-color: #05B8CC;
    border-radius: 50px;
}
""")

在这个示例中:

  • setObjectName() 用于设置控件的名称,在CSS样式表中使用;

  • setStyleSheet() 中的CSS样式表定义了进度条的一些基础特性,如背景、边框等;

  • chunk 则是进度条的颜色块,用来展现当前进度。

3. 运行程序

在运行程序前,需要先将控件放入GUI中。这里假设我们已经通过 QWidget() 创建了一个窗口。

window = QWidget()
window.setGeometry(400, 400, 300, 200)
window.setLayout(QVBoxLayout())
window.layout().addWidget(progressbar) # 将进度条加入窗口
window.show()
  • QVBoxLayout() 用于创建一个垂直盒子容器,把进度条放入里面;

  • window.layout() 用于获取窗口中的布局管理器,再通过 addWidget() 加入控件。

运行程序即可看到设置好皮肤的进度条。