日期:2025/04/06 02:04来源:未知 人气:52
PyQt5界面编程,使用QTableWidget创建界面,快速获取硬盘信息
今天,完善另外一个控件QChartView的内容。我们来看下最终程序运行效果。
程序最终效果
QGraphicsView模块提升为QChartView
QChartView原来是QT公司的商用包,后来开源了。但是相对来说文档说明少。使用Qt设计师创建应用程序时,由于这个控件不是Qt设计师中基本控件,我们常用提升控件的方法将它引入界面中。
QGraphicsView提升方法
弹出对话框后输入下面内容。
然后点击【添加】->【提升】即可导入。
这里我们直接将头文件改为导入模块的语句。
将.ui文件转化为.py文件后,我们打开这个界面文件
把它复制到第一行就可以了。
在QChartView中绘制图表
下面我们看下QChartView绘制图表的一般过程
第一步:创建QChart对象实例
self.chart_disk = QtChart.QChart()这里我们对图例外观进行一些个性化设置
比如:
设置图例字体
f_legend = QFont()f_legend.setFamily("楷体")f_legend.setPointSize(14)self.chart_disk.legend().setFont(f_legend)设置标题
self.chart_disk.setTitle("磁盘使用情况")f_title = QFont()f_title.setFamily("微软雅黑")f_title.setPointSize(22)self.chart_disk.setTitleFont(f_title)设置图表动画效果
self.chart_disk.setAnimationOptions(QtChart.QChart.AnimationOption.SeriesAnimations)其它还有很多,自己看下文档,对照这个思路,应该没有问题。
第二步:创建图表序列
这一步很重要,因为我们需要展示的数据在这一步添加
对于硬盘容量来讲,最重要的两个参数就是已用控件和剩余空间,我们添加这两个序列对象。
self.set0 = QtChart.QBarSet('已用')self.set1 = QtChart.QBarSet('未用')这两个序列对象提供了很多方法用来设置外观,比如:颜色等
self.set0.setColor(QColor('green'))self.set1.setColor(QColor('blue'))这里创建了2个条形图序列,然后将它们添加到一个百分比条形序列中
self.series_disk = QtChart.QPercentBarSeries()self.series_disk.append(self.set0)self.series_disk.append(self.set1)第三步:将序列添加到图表中
这时,我们的序列里面还没有数据
self.chart_disk.addSeries(self.series_disk)到这里,基本框架就搭建完成了。我们需要对图表的坐标轴进行设置(先不讨论添加数据)
第四步:在图表中添加坐标轴
将X轴作为类别轴,Y轴作为值轴
self.axisX_disk = QtChart.QBarCategoryAxis()self.axisY_disk = QtChart.QValueAxis()第五步:把坐标轴添加到QChart对象实例中
这一步,将坐标轴添加到图表中
self.chart_disk.addAxis(self.axisX_disk, Qt.AlignmentFlag.AlignBottom)self.chart_disk.addAxis(self.axisY_disk, Qt.AlignmentFlag.AlignLeft)第六步:把序列关联到坐标轴
这里我们将序列关联到坐标轴上面
self.series_disk.attachAxis(self.axisX_disk)self.series_disk.attachAxis(self.axisY_disk)第七步:将图表实例放置在我们的控件里
self.__ui.chart_disk_info.setChart(self.chart_disk)代码中self.__ui.chart_disk_info是我们利用Qt设计师添加到界面上的那个QChartView控件。
到了,这一步,乍一看没什么问题。细心的小伙伴可能发现了,我们的序列里面根本没有数据。如何把序列里面的数据关联到坐标轴,我们创建一个类别模型。
self.categories = QStringListModel()然后,获取硬盘信息
mydisk = psutil.disk_partitions()遍历分区
self.categories.setStringList(partlst)self.axisX_disk.append(partlst)这样,我们就完成了数据添加。
制作轮子
有了前面的基础,我们完成之前的案例就很简单了。这里不再赘述,小伙伴们根据案例源代码,对照看一下这个过程。
当然,还有很多需要改进的地方,比如,当我们的磁盘容量大于80%时,让程序提醒我们,这个功能怎么实现呢?留给小伙伴们一个作业,后续我们介绍。
最后,奉上这个小程序的源代码,关注并私信“diskinfoqt”。