Last Updated on 2021-09-06 by Clay
最近,當我將從前使用 PyQt5 框架寫的程式從 Linux 搬到 Mac 上後,驚訝地發現在 Mac 下方的 Dock 中,PyQt5 的程式圖示(Icon)居然被換成一個奇怪的火箭(聽說是 Python Laucher 的圖示)—— 在我之前所使用的 Linux 作業系統中顯示是沒有問題的。
可以使用下方的程式做個範例(icon.png 可以隨便找、我使用的 Ui_MainWindow 則是使用 Qt Designer 拉出來的):
# coding: utf-8 import sys from PyQt5.QtWidgets import * from PyQt5.QtGui import * from UI import Ui_MainWindow class MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() self.ui = Ui_MainWindow() self.ui.setupUi(self) self.setWindowIcon(QIcon('pic/icon.png')) if __name__ == '__main__': app = QApplication([]) window = MainWindow() window.show() sys.exit(app.exec_())
Output:
解決方法
解決方法很單純,可是我並不懂其中的原理:把設定 Icon 圖片的程式碼在外面設定即可。
簡單來講,下面的程式便可以正常在 Dock 中顯示自己的 Icon 了。
# coding: utf-8
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from UI import Ui_MainWindow
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.setWindowTitle('Code-to-Html')
# Remove it
# self.setWindowIcon(QIcon('pic/icon.png'))
if __name__ == '__main__':
app = QApplication([])
# Add it
app.setWindowIcon(QIcon('pic/icon.png'))
window = MainWindow()
window.show()
sys.exit(app.exec_())
Output:
可以看到,Icon 正常顯示了!看來在 Mac OS 中存在著許多跟 Windows、Linux 不同的寫法,這個就要持續測試了。