1、引言
PyQt5是Python跨平台GUI编程的重要工具,可以提供优美的桌面程序画面,在给控件设置图标方面,网络免费图标资源杂乱不成体系,精美的图标需要付出一定的费用。为了快速部署控件图标,不再为这种事烧脑劳神,这不PYqt5提供了标准化的内置图标,调用起来只需要非常方便,下面就用一个程序展示这些图标,并提供调用程序,本文参考了作者:编码那些事所著的《Python3+PyQt5编程:如何获取PyQt5中内置的图标并显示?》一文,但该文中程序脚本格式存在问题,本程序调试成功并将程序展示给大家,请参考。
2、Pyqt5程序的实现
设计方法是在一个窗口中,使用网格布局(QGridLayout),每行显示5个按钮控件,在每个按钮控件上显示出一个图标,并同时显示出该图标的名称及其对应的索引号。
使用QApplication.style().standardIcon()方法来实现对其标准内置图标的使用,程序中使用了较多的面向对象编程方法,值得反复研究。
用户在自己的程序调用时,可以直接对于上图的编号进行调用,方法如下:
self.bt_1.setIcon(QApplication.style().standardIcon(29)) #bt_1可换成自己的控件,29是图标标号
完整程序代码如下:
# -*- coding: utf-8 -*-#
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class MainWnd(QWidget):
def __init__(self, parent=None):
super(MainWnd, self).__init__(parent)
self.move(0,0)
icons = sorted(self.getEnumStrings(QStyle, QStyle.StandardPixmap).items())
layout = QGridLayout(self)
colNums = 5 #每行显示的图标数目#
for i, iconInfo in enumerate(icons[1:]):
btn = QPushButton(QApplication.style().standardIcon(i), ' {} - {}'.format(*iconInfo))
btn.setStyleSheet('QPushButton{text-align:left; height:30}')
layout.addWidget(btn, int(i / colNums), i % colNums)
self.setWindowTitle('Qt内置图标显示')
self.setWindowIcon(QApplication.style().standardIcon(0))
def getEnumStrings(self, cls, enum):
s = {}
for key in dir(cls):
value = getattr(cls, key)
if isinstance(value, enum):
s['{:02d}'.format(value)] = key
return s
if __name__ == '__main__':
app = QApplication(sys.argv)
w = MainWnd()
w.show()
sys.exit(app.exec_())