最近在学习PyQT5,参考 http://www.cnblogs.com/archisama/p/5442071.html 的教程,教程翻译自:zetcode , 刚开始就遇到了一个奇怪问题,就是在设置应用的icon的时候,在osx 10.11.6系统,按照例程死活显示不出来图标。

例程是这样的:

#!/usr/bin/python3
# -*- coding: utf-8 -*-

"""
ZetCode PyQt5 tutorial 

This example shows an icon
in the titlebar of the window.

author: Jan Bodnar
website: zetcode.com 
last edited: January 2015
"""

import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QIcon


class Example(QWidget):
    
    def __init__(self):
        super().__init__()
        
        self.initUI()
        
        
    def initUI(self):
        
        self.setGeometry(300, 300, 300, 220)
        self.setWindowTitle('Icon')
        self.setWindowIcon(QIcon('web.png'))        
    
        self.show()
        
        
if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

Google搜索了一下,发现在 stackoverflow 也有人遇到同样的问题。如果按采用的答案也没有成功,但确实是要把这个方法放到Qapplication实例,然后再加上第二个哥们的回答,在 Qicon 里再调用一次Qpixmap ,并且传入一个ico格式的图片才能成功。完整代码如下:

#!/usr/bin/env python3
# -*- coding:utf-8 -*-

import sys,os

import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QIcon,QPixmap


class Example(QWidget):
    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):
        self.setGeometry(300, 300, 300, 220)
        self.setWindowTitle('Hello Icon')
        self.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    path = os.path.join(os.path.dirname(sys.modules[__name__].__file__), 'good.ico')
    app.setWindowIcon(QIcon(QPixmap(path)))
    ex = Example()
    sys.exit(app.exec_())

这样就显示出来了。

Snip20170312_121

 

- EOF -