使用PySide6/PyQt6实现系统图标的展示和选择处理
<p>在我们的基于PySide6/PyQt6的前端应用中,为了方便和重用,我们收集一些系统图标作为界面的使用,另外PySide/PyQt内部也有内置的图标,我们可以结合起来对图标进行统一的展示和选择处理,如在系统定义动态菜单的时候,我们可以为它指定具体的图标,从而灵活定义菜单的相关展示效果。</p><h3>1、使用PySide6/PyQt6实现系统图标的展示和选择处理</h3>
<p><img src="https://img2024.cnblogs.com/blog/8867/202509/8867-20250915212544320-1221806189.png" alt="image" width="1289" height="1029" loading="lazy"></p>
<p> 如上面所示,我们在菜单管理中需要汇总系统的相关图标,以便在菜单编辑中选择具体的图标效果。</p>
<p><img src="https://img2024.cnblogs.com/blog/8867/202509/8867-20250915213336378-1240414328.png" alt="image" width="783" height="583" loading="lazy"></p>
<p>选择图标会弹出一个可缩放的对话框出来,如下界面所示。</p>
<p><img src="https://img2024.cnblogs.com/blog/8867/202509/8867-20250915213540911-912956178.png" alt="image" width="793" height="503" loading="lazy"></p>
<p>上面的图标对话框,我们为了更好的展现效果,使用一个自己封装好的可伸缩调整大小的对话框基类,如下关系</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> MySizedDialog(QDialog):
</span><span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(128, 0, 0, 1)">自定义对话框基类</span><span style="color: rgba(128, 0, 0, 1)">"""</span>
<span style="color: rgba(0, 0, 255, 1)">def</span> <span style="color: rgba(128, 0, 128, 1)">__init__</span><span style="color: rgba(0, 0, 0, 1)">(
self,
parent,
title</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">默认对话框标题</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
can_scroll</span>=<span style="color: rgba(0, 0, 0, 1)">True,
show_btn_ok</span>=<span style="color: rgba(0, 0, 0, 1)">True,
size</span>=(400, 600<span style="color: rgba(0, 0, 0, 1)">),
pos</span>=<span style="color: rgba(0, 0, 0, 1)">None,
):
super().</span><span style="color: rgba(128, 0, 128, 1)">__init__</span><span style="color: rgba(0, 0, 0, 1)">(parent)
self.log </span>=<span style="color: rgba(0, 0, 0, 1)"> settings.log.get_logger()
self.setWindowTitle(title)
self.setWindowIcon(images.catalog[</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">appIcon</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">])
self.show_btn_ok </span>=<span style="color: rgba(0, 0, 0, 1)"> show_btn_ok
self.can_scroll </span>= can_scroll</pre>
</div>
<p>关于可伸缩的对话框基类,我们在控件界面的底部,根据配置创建OK、Cancel的标准按钮集合,如下代码所示。</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 0, 255, 1)">def</span> _add_buttons(self) -><span style="color: rgba(0, 0, 0, 1)"> QDialogButtonBox:
</span><span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(128, 0, 0, 1)">创建按钮</span><span style="color: rgba(128, 0, 0, 1)">"""</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> self.show_btn_ok:<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> OK按钮、Cancel按钮都显示</span>
<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 创建标准按钮框(包括 OK 和 Cancel)</span>
button_box =<span style="color: rgba(0, 0, 0, 1)"> QDialogButtonBox(
QDialogButtonBox.StandardButton.Ok
</span>|<span style="color: rgba(0, 0, 0, 1)"> QDialogButtonBox.StandardButton.Cancel
)
</span><span style="color: rgba(0, 0, 255, 1)">else</span>:<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 只显示 Cancel 按钮</span>
button_box =<span style="color: rgba(0, 0, 0, 1)"> QDialogButtonBox(QDialogButtonBox.StandardButton.Cancel)
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 查找 OK 按钮</span>
ok_button =<span style="color: rgba(0, 0, 0, 1)"> button_box.button(QDialogButtonBox.StandardButton.Ok)
</span><span style="color: rgba(0, 0, 255, 1)">if</span> ok_button:<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 检查按钮是否存在</span>
<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 设置图标</span>
ok_button.setIcon(images.catalog[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">accept</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">])
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 异步绑定事件</span>
<span style="color: rgba(0, 0, 0, 1)"> ok_button.clicked.connect(self.on_ok)
cancel_button </span>=<span style="color: rgba(0, 0, 0, 1)"> button_box.button(QDialogButtonBox.StandardButton.Cancel)
</span><span style="color: rgba(0, 0, 255, 1)">if</span> cancel_button:<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 检查按钮是否存在</span>
<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 设置图标</span>
cancel_button.setIcon(images.catalog[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">cancel</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">])
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 异步绑定事件</span>
<span style="color: rgba(0, 0, 0, 1)"> cancel_button.clicked.connect(self.on_cancel)
</span><span style="color: rgba(0, 0, 255, 1)">return</span> button_box</pre>
</div>
<p> </p>
<p>然后再构建一个图标选择的控件类即可,如下所示。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> MyImageDialog(ctrl.MySizedDialog):
</span><span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(128, 0, 0, 1)">图片选择对话框</span><span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(0, 0, 0, 1)">
selected_name </span>= <span style="color: rgba(128, 0, 0, 1)">""</span><span style="color: rgba(0, 0, 0, 1)">
selected_bitmap </span>=<span style="color: rgba(0, 0, 0, 1)"> None
</span><span style="color: rgba(0, 0, 255, 1)">def</span> <span style="color: rgba(128, 0, 128, 1)">__init__</span><span style="color: rgba(0, 0, 0, 1)">(
self,
parent,
title</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">图片选择对话框</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
can_scroll</span>=<span style="color: rgba(0, 0, 0, 1)">True,
show_btn_ok</span>=<span style="color: rgba(0, 0, 0, 1)">True,
size</span>=(800, 600<span style="color: rgba(0, 0, 0, 1)">),
pos</span>=<span style="color: rgba(0, 0, 0, 1)">None,
return_icon_size</span>=32<span style="color: rgba(0, 0, 0, 1)">,
):
super().</span><span style="color: rgba(128, 0, 128, 1)">__init__</span><span style="color: rgba(0, 0, 0, 1)">(
parent,
title</span>=<span style="color: rgba(0, 0, 0, 1)">title,
can_scroll</span>=<span style="color: rgba(0, 0, 0, 1)">can_scroll,
show_btn_ok</span>=<span style="color: rgba(0, 0, 0, 1)">show_btn_ok,
size</span>=<span style="color: rgba(0, 0, 0, 1)">size,
pos</span>=<span style="color: rgba(0, 0, 0, 1)">pos,
)
self.return_icon_size </span>= return_icon_size</pre>
</div>
<p> </p>
<p><img src="https://img2024.cnblogs.com/blog/8867/202509/8867-20250915222803606-1958146462.png" alt="image" loading="lazy"></p>
<p> 我们在图标选择的对话框,使用了选项卡控件来构建两个界面,一个是展示我们自定义的图标集合,一个是展示系统的内置图标集合。</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> add_contents(self, panel: QWidget, grid_sizer: QGridLayout):
</span><span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(128, 0, 0, 1)">创建列表面板</span><span style="color: rgba(128, 0, 0, 1)">"""</span>
<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 创建 QTabWidget</span>
self.notebook =<span style="color: rgba(0, 0, 0, 1)"><span style="color: rgba(255, 0, 0, 1)"><strong> QTabWidget</strong></span>(<span style="color: rgba(255, 0, 0, 1)"><strong>panel</strong></span>)
self.notebook.setTabPosition(QTabWidget.TabPosition.North)
self.first </span>=<span style="color: rgba(0, 0, 0, 1)"> self.<span style="color: rgba(255, 0, 0, 1)"><strong>create_first</strong></span>()
self.second </span>=<span style="color: rgba(0, 0, 0, 1)"> self.<span style="color: rgba(255, 0, 0, 1)"><strong>create_second</strong></span>()
self.notebook.addTab(self.first, get_bitmap(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">group</span><span style="color: rgba(128, 0, 0, 1)">"</span>), <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">自定义内嵌图片</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
self.notebook.addTab(self.second, get_bitmap(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">group_key</span><span style="color: rgba(128, 0, 0, 1)">"</span>), <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">系统图标</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 创建 QLabel,用于显示图片</span>
self.bmpCtrl =<span style="color: rgba(0, 0, 0, 1)"> QLabel(panel)
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> self.bmpCtrl.setFixedSize(32, 32)# 设置固定大小</span>
self.bmpCtrl.setStyleSheet(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">border: 1px solid black;</span><span style="color: rgba(128, 0, 0, 1)">"</span>)<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 设置边框样式</span>
self.bmpCtrl.setSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Fixed)<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 设置尺寸策略</span>
<span style="color: rgba(0, 0, 0, 1)">
grid_sizer.addWidget(self.notebook)
grid_sizer.addWidget(self.bmpCtrl)<br></span></pre>
</div>
<p> 我们以自定义的图表集合为例,我们创建的第一个create_first()函数 里面就是根据集合遍历进行展示,如下代码。</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 0, 255, 1)">def</span> create_first(self) -><span style="color: rgba(0, 0, 0, 1)"> QWidget:
</span><span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(128, 0, 0, 1)">创建自定义内嵌图片面板</span><span style="color: rgba(128, 0, 0, 1)">"""</span>
<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 创建面板</span>
panel =<span style="color: rgba(0, 0, 0, 1)"> self._create_window(self, True)
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 创建 WrapSizer</span>
icon_layout =<span style="color: rgba(0, 0, 0, 1)"> ctrl.FlowLayout()
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 遍历图片目录,创建图标</span>
<span style="color: rgba(0, 0, 255, 1)">for</span> idx, (key, value) <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"><span style="color: rgba(255, 0, 0, 1)"><strong> enumerate(images.catalog.items())</strong></span>:
icon_panel </span>=<span style="color: rgba(0, 0, 0, 1)"> self.create_icon(panel, value, key)
icon_layout.addWidget(icon_panel)
child_panel </span>=<span style="color: rgba(0, 0, 0, 1)"> QWidget(panel)
child_panel.setLayout(icon_layout)
</span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> isinstance(panel, QScrollArea):
panel.setWidget(child_panel)
</span><span style="color: rgba(0, 0, 255, 1)">return</span> panel</pre>
</div>
<p> </p>
<p>而其中images是我们导入的系统全局图标集合,它是在系统初始化的时候进行内存加载,驻留全局使用的。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">from</span> core.core_images <span style="color: rgba(0, 0, 255, 1)">import</span> CoreImages as images</pre>
</div>
<p> </p>
<p> 我们是在登录界面初始化的时候,就对系统全局图标集合进行加载的。</p>
<p><img src="https://img2024.cnblogs.com/blog/8867/202509/8867-20250915215329742-189028339.png" alt="image" width="701" height="359" loading="lazy"></p>
<p> 我们和WxPython 的做法类似,使用Base64编码进行图片处理,其中Base64编码我们通过辅助类来构建生成。</p>
<p><img src="https://img2024.cnblogs.com/blog/8867/202509/8867-20250915215709860-2055129607.png" alt="image" width="921" height="568" loading="lazy"></p>
<p> 如果需要根据文件生成base64编码,单独运行辅助类即可,它运行提示输入文件,或者拖入文件即可获得文件名,运行后生成Base64编码和相关代码,拷贝过去使用即可。</p>
<p><img src="https://img2024.cnblogs.com/blog/8867/202509/8867-20250915220226605-1662125980.png" alt="image" width="920" height="536" loading="lazy"></p>
<p><img src="https://img2024.cnblogs.com/blog/8867/202509/8867-20250915220502946-842970641.png" alt="image" width="925" height="360" loading="lazy"></p>
<p> 对于PySide/PyQT的内置图标</p>
<p><img src="https://img2024.cnblogs.com/blog/8867/202509/8867-20250915220816331-401443021.png" alt="image" width="920" height="603" loading="lazy"></p>
<p> 我们可以通过遍历<span style="color: rgba(255, 0, 0, 1)"> <strong>QStyle.StandardPixmap</strong> </span>来获取并展示的</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 创建 WrapSizer</span>
icon_layout =<span style="color: rgba(0, 0, 0, 1)"> ctrl.FlowLayout()
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 获取所有标准图标</span>
i =<span style="color: rgba(0, 0, 0, 1)"> 0
</span><span style="color: rgba(0, 0, 255, 1)">for</span> standard_icon <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> QStyle.StandardPixmap:
icon </span>= QApplication.style().standardIcon(standard_icon)<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 获取标准图标</span>
<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 检查图标是否有效</span>
<span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> icon.isNull():
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> print(f"跳过无效图标: {standard_icon.name}")</span>
<span style="color: rgba(0, 0, 255, 1)">continue</span><span style="color: rgba(0, 0, 0, 1)">
pixmap_32 </span>= icon.pixmap(32, 32)<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 生成 32x32 的 QPixmap</span>
icon_32 = QIcon(pixmap_32)<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 重新创建 QIcon</span>
name = standard_icon.name<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 获取图标名称</span>
<span style="color: rgba(0, 0, 0, 1)">
icon_panel </span>=<span style="color: rgba(0, 0, 0, 1)"> self.create_icon(panel, icon_32, name)
icon_layout.addWidget(icon_panel)
i </span>+= 1</pre>
</div>
<p> </p>
<p>在图标展示后,每个图标都在接收单击事件后,传入对象的相关信息,因此选中并确认后返回图标的信息。</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> on_item_selected(self, event, name: str):
</span><span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(128, 0, 0, 1)">鼠标左键单击事件处理</span><span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(0, 0, 0, 1)">
icon </span>=<span style="color: rgba(0, 0, 0, 1)"> get_bitmap(name, self.return_icon_size)
bitmap </span>= icon.pixmap(32, 32<span style="color: rgba(0, 0, 0, 1)">)
bitmap </span>= bitmap.scaled(32, 32<span style="color: rgba(0, 0, 0, 1)">, Qt.AspectRatioMode.KeepAspectRatio, Qt.TransformationMode.SmoothTransformation)
self.selected_name </span>=<span style="color: rgba(0, 0, 0, 1)"> name
self.selected_bitmap </span>=<span style="color: rgba(0, 0, 0, 1)"> bitmap
self.bmpCtrl.setPixmap(bitmap)
</span><span style="color: rgba(0, 0, 255, 1)">print</span>(f<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">你选择了: {name}</span><span style="color: rgba(128, 0, 0, 1)">"</span>)</pre>
</div>
<p> </p>
<p>这样我们就可以根据名称进行图标的展示了。</p>
<p>我们在bitmap_util.py的辅助类中定义获取图标为位图对象QIcon的转换,如下是根据名称生成对应的位图对象QIcon。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">def</span> get_bitmap(name: str, icon_size: int = 32) -><span style="color: rgba(0, 0, 0, 1)"> QIcon:
</span><span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(128, 0, 0, 1)">获取位图,可以根据名称获取images里面的内容,或者是系统内置的图标SP_XXX</span><span style="color: rgba(128, 0, 0, 1)">"""</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> name <span style="color: rgba(0, 0, 255, 1)">is</span> None <span style="color: rgba(0, 0, 255, 1)">or</span> name == <span style="color: rgba(128, 0, 0, 1)">""</span><span style="color: rgba(0, 0, 0, 1)">:
name </span>= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">appIcon</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> name.startswith(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">SP_</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">):
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 系统内置的图标</span>
icon =<span style="color: rgba(0, 0, 0, 1)"> get_standard_icon(name, icon_size)
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> icon
</span><span style="color: rgba(0, 0, 255, 1)">elif</span> name.startswith(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">ic_fluent_</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">):
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 微软Fluent系统图标</span>
icon =<span style="color: rgba(0, 0, 0, 1)"> FluentSystemIconUtil.create_icon_by_name(name, icon_size)
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> icon
</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 自定义内置的图标</span>
icon =<span style="color: rgba(0, 0, 0, 1)"> get_customed_icon_with_default(name, icon_size)
</span><span style="color: rgba(0, 0, 255, 1)">return</span> icon</pre>
</div>
<p> </p>
<p>以上就是基于PySide6/PyQt6的前端应用中,对自定义的图标资源以及内置图标资源进行整合的展示处理,以及如何生成base64编码,加载显示图标的一整个过程。</p>
<p> </p>
</div>
<div id="MySignature" role="contentinfo">
<div style="border-right-color: #cccccc; border-right-width: 1px; border-right-style: solid; padding-right: 5px; border-top-color: #cccccc; border-top-width: 1px; border-top-style: solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left-color: #cccccc; border-left-width: 1px; border-left-style: solid; width: 98%; padding-top: 4px; border-bottom-color: #cccccc; border-bottom-width: 1px; border-bottom-style: solid; background-color: #eeeeee;">
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" alt>
<span style="color: #000000"><span class="Apple-tab-span" style="white-space: pre"></span>
专注于代码生成工具、.Net/Python 框架架构及软件开发,以及各种Vue.js的前端技术应用。著有Winform开发框架/混合式开发框架、微信开发框架、Bootstrap开发框架、ABP开发框架、SqlSugar开发框架、Python开发框架等框架产品。
<br> 转载请注明出处:撰写人:伍华聪 http://www.iqidi.com <br> </span></div><br><br>
来源:https://www.cnblogs.com/wuhuacong/p/19093841
頁:
[1]