PyQt中的图标未正确显示

1 投票
2 回答
2064 浏览
提问于 2025-04-17 13:37

我开发了一个应用程序,它在系统托盘中有菜单,使用的是Python 2.6.4和PyQt4。

每台客户端电脑上都安装了Python,并且是从网络位置访问PyQt4。

我设置了系统托盘和菜单项所需的图标,具体如下。应用程序的文件夹里有一个icons文件夹,我就是从这里使用图标的,所以我用了os.getcwd()来获取当前工作目录。

我把这个应用程序的文件夹放在网络上,这样大家都可以访问。

self.mnuItem_1 = QtGui.QAction(QtGui.QIcon(r'%s\icons\icon1.ico' % (os.getcwd())), "Menu Item 1", self)
self.mnuItem_2 = QtGui.QAction(QtGui.QIcon(r'%s\icons\icon1.ico' % (os.getcwd())), "Menu Item 1", self)

self.trayIconMenu = QtGui.QMenu(self)
self.trayIconMenu.addAction(self.mnuItem_1)
self.trayIconMenu.addAction(self.mnuItem_2)
self.trayIcon = QtGui.QSystemTrayIcon(self)
self.trayIcon.setContextMenu(self.trayIconMenu)
TrayIcon = (r'%s\ShowTime_Addons\Media\showtimeIcon.ico' % (os.getcwd()))
self.trayIcon.setIcon(QtGui.QIcon(TrayIcon))
self.trayIcon.setToolTip('Showtime')
self.trayIcon.show()

在某些系统上,我能看到图标,但在其他一些系统上,图标却不显示。

为了测试,我放了一些.png格式的图标,结果是可以正常工作的。

self.mnuItem_1 = QtGui.QAction(QtGui.QIcon(r'%s\icons\icon1.png' % (os.getcwd())), "Menu Item 1", self)
self.mnuItem_2 = QtGui.QAction(QtGui.QIcon(r'%s\icons\icon1.png' % (os.getcwd())), "Menu Item 1", self)

所以我明白了,问题不在于路径,而是其他原因。

2 个回答

0

不确定这是不是解决办法,但建议你不要使用 os.getcwd(),因为它会给你当前的工作目录,这个目录可能和你的应用程序目录不一样。要确定应用程序的目录,可以使用:

base_dir = os.path.dirname(os.path.abspath(__file__))

然后用 base_dir 替代 os.getcwd(),或者这样做:

os.chdir(base_dir)
0

我找到了解决这个问题的方法。

一种方法是把路径设置在 qt.config 文件里,然后把这个文件放在你的可执行文件所在的位置。(在我的情况下是 C:\Python26)

正如我在问题中提到的,我是从网络位置访问 PyQt4,比如 \\somesystem\Share\PyQt4

我们会在 \\somesystem\Share\PyQt4 找到一个 qt.config 文件。

把这个文件拿过来,并在 qt.conf 中添加以下内容:

[Paths]
Prefix = //somesystem/Share/PyQt4
Binaries = //somesystem/Share/PyQt4

这样一切都能正常工作,甚至数据库驱动也会被加载。无需使用 app.addLibraryPath

撰写回答