PyQt中的图标未正确显示
我开发了一个应用程序,它在系统托盘中有菜单,使用的是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
。