屈丽 發表於 2025-9-15 22:18:00

使用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>&nbsp;如上面所示,我们在菜单管理中需要汇总系统的相关图标,以便在菜单编辑中选择具体的图标效果。</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) -&gt;<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>&nbsp;</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>&nbsp;</p>
<p><img src="https://img2024.cnblogs.com/blog/8867/202509/8867-20250915222803606-1958146462.png" alt="image" loading="lazy"></p>
<p>&nbsp;我们在图标选择的对话框,使用了选项卡控件来构建两个界面,一个是展示我们自定义的图标集合,一个是展示系统的内置图标集合。</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>&nbsp;我们以自定义的图表集合为例,我们创建的第一个create_first()函数 里面就是根据集合遍历进行展示,如下代码。</p>
<div class="cnblogs_code">
<pre>    <span style="color: rgba(0, 0, 255, 1)">def</span> create_first(self) -&gt;<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>&nbsp;</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>&nbsp;</p>
<p>&nbsp;我们是在登录界面初始化的时候,就对系统全局图标集合进行加载的。</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>&nbsp;我们和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>&nbsp;如果需要根据文件生成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>&nbsp;对于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>&nbsp;我们可以通过遍历<span style="color: rgba(255, 0, 0, 1)">&nbsp;<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>&nbsp;</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>&nbsp;</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) -&gt;<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>&nbsp;</p>
<p>以上就是基于PySide6/PyQt6的前端应用中,对自定义的图标资源以及内置图标资源进行整合的展示处理,以及如何生成base64编码,加载显示图标的一整个过程。</p>
<p>&nbsp;</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]
查看完整版本: 使用PySide6/PyQt6实现系统图标的展示和选择处理