Skip to content

[PyQt5][Mac OS] 如何顯示圖示(Icon)在下方欄位(Dock)

最近,當我將從前使用 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 不同的寫法,這個就要持續測試了。


References


Read More

Leave a Reply