2023年6月23日 星期五

Python 學習筆記 : 如何設定 Tkinter 視窗的圖標 (icon)

Tkinter 視窗預設的圖標 (icon) 是一個羽毛, 以下面簡單的空視窗程式為例 :

import tkinter as tk
from tkinter import ttk

# 建立視窗
root=tk.Tk()  # 建立視窗物件
root.title('測試') # 設定視窗標題
root.geometry('300x200')  # 設定視窗尺寸

root.mainloop()

執行後可看到視窗左上角的預設羽毛圖標 :




如果要更改為自訂的圖標該怎麼做? 首先用小畫家或其他圖像編輯軟體製作一個 16*16 的圖檔, 例如我用 Tony 的 T 作為圖標 (logo.bmp) : , 然後用線上轉檔軟體轉成 .ico 檔, 例如 :


雖然此網站標題寫 'png 轉 ico', 其實 jpg 或 bmp 等都是可以的 : 


轉完後下載 logo,ico, 將其放在程式目錄下, 然後改寫程式, 呼叫根視窗物件的 iconbitmap() 方法並傳入圖標的檔名即可 :

import tkinter as tk
from tkinter import ttk

# 建立視窗
root=tk.Tk()  # 建立視窗物件
root.title('測試') # 設定視窗標題
root.geometry('300x200')  # 設定視窗尺寸
root.iconbitmap('logo.ico')  
root.mainloop()

結果如下 :




2023-07-16 補充 :

如果程式搬移時 .ico 檔沒有隨同搬移, 則執行時會因為讀不到檔案而發生例外, 因此需用 try except 捕捉, 例如 :

import tkinter as tk
from tkinter import ttk

# 建立視窗
root=tk.Tk()  # 建立視窗物件
root.title('測試') # 設定視窗標題
root.geometry('300x200')  # 設定視窗尺寸
try:  # 避免沒有 logo 時錯誤
    root.iconbitmap('logo.ico')  
except Exception as e:
    pass
root.mainloop()

這樣當 logo.ico不存在時就會使用預設的 .ico. 

沒有留言:

張貼留言