使用PyQt5进行软件界面布局时关于应用图标,托盘图标相关的设置;虽然开发时间不长,但是对使用情况做个记录
1、窗口图标
关于窗口图标的使用,pyqt5和大多数UI编程工具类似,在Qt Designer中的控件属性里可以设置
![]()
![]()
2、应用图标
应用图标则是指应用程序打包成.exe程序时,显示的图标,python下的打包工具常用的是PyInstaller。打包指令如下:
pyinstaller -F -w -i "./my_icon.ico" .\test.py
其中“my_icon.ico”即是要使用的打包应用所用的图标;
3、托盘图标
以上两种都是常用的,图标设置。关于托盘图标设置,若需要将程序隐藏到托盘运行,则必须设置;若图标未和程序一起打包到.exe中,将会使托盘功能失效。说到图标就要先说下托盘隐藏的实现,一下是我在网上根据大佬们的指导实现的一个简单托盘程序类。
class TrayIcon(QtWidgets.QSystemTrayIcon):
def __init__(self, MainWindow, parent=None):
super(TrayIcon, self).__init__(parent)
self.ui = MainWindow
self.createMenu()
# self.singleton_checker = SingleInstanceChecker
def createMenu(self):
self.menu = QtWidgets.QMenu()
self.showAction1 = QtWidgets.QAction("显示主界面", self, triggered=self.show_window)
self.disableAction = QtWidgets.QAction("隐藏", self, triggered=self.disable_window)
self.quitAction = QtWidgets.QAction("退出", self, triggered=self.quit)
self.menu.addAction(self.showAction1)
self.menu.addAction(self.disableAction)
# self.menu.addAction(self.showAction2)
self.menu.addAction(self.quitAction)
self.setContextMenu(self.menu)
# 设置图标
self.setIcon(QtGui.QIcon("./favicon.ico"))
self.icon = self.MessageIcon()
# 把鼠标点击图标的信号和槽连接
self.activated.connect(self.onIconClicked)
def disable_window(self):
self.ui.hide()
def show_window(self):
# 若是最小化,则先正常显示窗口,再变为活动窗口(暂时显示在最前面)
self.ui.showNormal()
self.ui.activateWindow()
def quit(self):
# print_in_log(log_file_path, "程序退出2!\n")
QtWidgets.qApp.quit()
# 鼠标点击icon传递的信号会带有一个整形的值,1是表示单击右键,2是双击,3是单击左键,4是用鼠标中键点击
def onIconClicked(self, reason):
if reason == 2 or reason == 3:
# self.showMessage("Message", "skr at here", self.icon)
if self.ui.isMinimized() or not self.ui.isVisible():
# 若是最小化,则先正常显示窗口,再变为活动窗口(暂时显示在最前面)
self.ui.showNormal()
self.ui.activateWindow()
self.ui.setWindowFlags(QtCore.Qt.Window)
self.ui.show()
else:
# 若不是最小化,则最小化
self.ui.setWindowFlags(QtCore.Qt.SplashScreen)
self.ui.showMinimized()
self.ui.show()
使用该方法创建的托盘必须将图标图片根据引用的路径放到指定位置,否则会导致托盘图标功能找不到依托图片而失效。
而将图标和应用程序打包到一起也有很多办法,这里主要讲到两种;
a、使用PyInstaller的spec文件制定打包额外的文件
-
将
.ico文件添加到项目目录中:将你的favicon.ico文件复制到你的项目文件夹中,确保它与你的 Python 脚本(.py文件)位于同一目录下或者一个你可以轻松访问的子目录下。 -
在 PyInstaller 的 spec 文件中指定额外的文件:你可以创建一个 PyInstaller 的 spec 文件(
.spec),并在其中指定要包含在可执行文件中的额外文件,包括你的.ico文件
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
added_files = [
('favicon.ico', '.') # 将 favicon.ico 添加到可执行文件中
]
a = Analysis(['your_script.py'],
pathex=['path/to/your/script'],
binaries=[],
datas=added_files,
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
[],
exclude_binaries=True,
name='your_script',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=False)
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='your_script')
3.使用 spec 文件打包你的应用程序:运行 PyInstaller 并指定你的 spec 文件:
pyinstaller myapp.spec
这种方法说是可以成功,我也忘记了我自己有没有成功,但觉得另一个方法也还不错。
b、使用pyrcc工具,将图标制作成.py文件https://blog.csdn.net/qq_42750240/article/details/131141491
首先,创建一个.qrc文件,该文件的作用是将资源文件(图标或者样式等)嵌入到Qt应用程序中。
<!DOCTYPE RCC><RCC version="1.0">
<qresource>
<file>favicon.ico</file>
</qresource>
</RCC>
其中favicon.ico就是你想嵌入的资源文件名,这里是图标。
接下来,在终端中使用pyrcc将上边制作的.qrc文件编译成python的一个模块就好。
pyrcc5 my_icons.qrc -o test_icons.py
“-o”和linux下使用gcc编译类似,用于指定输出文件名称,运行完成没报错的话,在应用程序路径下就能找到一个“test_icons.py”的文件,这个文件包含了再.qrc中定义的资源。
之后,就像导入普通模块一样,import一下就好,然后在那原有调用图标处将调用指令换成“:/favicon.ico”
...
import test_icons
...
self.setIcon(QtGui.QIcon(":/favicon.ico"))
self.icon = self.MessageIcon()
这样,在程序运行时,你就可以通过相应的资源路径来访问这个图标了,而不需要依赖外部文件。
上面就是一些使用PyQt5制作应用程序时,关于图标使用的相关记录,自己做个笔记,也希望对大家有帮助!共勉!!!
580

被折叠的 条评论
为什么被折叠?



