import tkinter as tk
root = tk.Tk()
# 創建 Frame,包含按鈕、列表框選擇的項目和 Entry
frame = tk.Frame(root)
# 刪除按鈕
def delete_selected():
frame.destroy()
# 列表框選擇的項目
selected_item = "UFA125A"
selected_label = tk.Label(frame,
text=selected_item)
selected_label.pack(side=tk.LEFT)
# Entry
length_entry = tk.Entry(frame)
length_entry.pack(side=tk.LEFT)
frame.pack()
# 創建圖示
trash_icon_path = r"C:\Temp\trash.PNG"
# 根據實際圖示的路徑進行調整
trash_icon = tk.PhotoImage(file=trash_icon_path)
#pyimage42 <class 'tkinter.PhotoImage'>
# 創建按鈕,並設置圖示和命令
delete_button = tk.Button(frame, image=trash_icon,
command=delete_selected)
delete_button.pack(side=tk.LEFT)
# 儲存圖像對象的參考
delete_button.image = trash_icon
#沒這一行的話會觸發TclError: image "pyimage12" doesn't exist
root.mainloop()
tk.PhotoImage(file=trash_icon_path)
是 Tkinter 中用於創建圖像物件的方法之一。它接受圖像文件的路徑作為參數,並返回一個 Tkinter 中可用的圖像對象。
在使用此方法時,請確保 trash_icon_path
變數中存儲的是圖像文件的正確路徑。該路徑應包含圖像文件的檔名和擴展名,例如 trash_icon_path = "path/to/trash.png"
。
輸出結果:
按垃圾桶圖示後
(一次刪除Label+Entry+Button):
使用 “\U0001F5D1” 這個 Unicode 字符作為按鈕的文字標籤,同時選擇了支援該符號的字體(在這個例子中是 Arial)和合適的字體大小。
注意,使用 Unicode 字符作為按鈕標籤的方法可能會受限於操作系統和所選的字體,因此結果可能會因系統和字體而異。如果需要更精確地控制按鈕外觀,使用圖像可能是更適合的選擇。
“\U0001F5D1” 是 Unicode 字符,表示一個垃圾桶的圖示。你可以在 Unicode 字符表中查詢各種符號和表情符號的對應 Unicode 碼。
有幾個網站提供 Unicode 字符表和搜尋功能,你可以使用這些網站來查詢特定符號的 Unicode 碼。
以下是一些常用的 Unicode 字符表網站:
- Unicode 官方網站:https://unicode.org/charts/
- Unicode Lookup:https://unicode-table.com/
- FileFormat.info:https://www.fileformat.info/info/unicode/
可以在這些網站中搜索 “garbage”、”trash” 或 “bin” 等相關關鍵字,找到垃圾桶圖示的 Unicode 碼。
使用 Unicode 字符作為按鈕標籤的方法確實可能會受限於操作系統和所選的字體。不同的操作系統和字體對於支援和渲染 Unicode 字符的能力可能有所不同。
Unicode 字符的呈現取決於操作系統、字體和字型設置。如果所選的字體中不包含指定的 Unicode 字符,則可能會顯示為空白方塊或其他占位符符號。
在使用 Unicode 字符作為按鈕標籤時,建議測試和驗證在目標操作系統和字體中的呈現效果,以確保所選字符在該環境中能夠正確顯示。
另外,如果確保垃圾桶圖示可以正確顯示非常重要,則使用圖像作為按鈕的內容可能是更可靠和一致的選擇,因為它不受操作系統和字體的限制。
調整垃圾桶圖示的大小
import tkinter as tk
from PIL import Image, ImageTk
root = tk.Tk()
# 創建 Frame,包含按鈕、列表框選擇的項目和 Entry
frame = tk.Frame(root)
frame.pack()
# 刪除按鈕
def delete_selected():
frame.destroy()
# 列表框選擇的項目
selected_item = "UFA125A"
selected_label = tk.Label(frame,
text=selected_item)
selected_label.pack(side=tk.LEFT)
# Entry
length_entry = tk.Entry(frame)
length_entry.pack(side=tk.LEFT)
#frame.pack()
# 創建圖示
trash_icon_path = r"C:\Temp\trash.PNG"
# 根據實際圖示的路徑進行調整
# trash_icon = tk.PhotoImage(file=trash_icon_path)
image = Image.open(trash_icon_path)
width, height = 15, 15
resized_image = image.resize((width, height), Image.ANTIALIAS)
trash_icon = ImageTk.PhotoImage(resized_image)
# 創建按鈕,並設置圖示和命令
delete_button = tk.Button(frame, image=trash_icon,
command=delete_selected)
delete_button.pack(side=tk.LEFT)
# 儲存圖像對象的參考
delete_button.image = trash_icon
#沒這一行的話會觸發TclError:
#image "pyimage12" doesn't exist
root.mainloop()
輸出結果:
每一個垃圾桶icon都有自己的frame:
import tkinter as tk
from PIL import Image, ImageTk
root = tk.Tk()
root.geometry("200x100")
# 創建主框架
main_frame = tk.Frame(root)
main_frame.pack()
# 創建項目列表
items = ["Item 1", "Item 2", "Item 3"]
# 創建項目框架和按鈕
for item in items:
item_frame = tk.Frame(main_frame)
item_frame.pack(side=tk.TOP, padx=10, pady=5)
# 刪除按鈕
def delete_item(frame):
frame.destroy()
# 項目標籤
item_label = tk.Label(item_frame, text=item)
item_label.pack(side=tk.LEFT)
# 創建圖示
trash_icon_path = r"C:\Temp\trash.PNG"
# 根據實際圖示的路徑進行調整
trash_icon = Image.open(trash_icon_path)
resized_icon = trash_icon.resize((20, 20), Image.ANTIALIAS)
tk_image = ImageTk.PhotoImage(resized_icon)
# 刪除按鈕
delete_button = tk.Button(item_frame, image=tk_image,
command=lambda frame=item_frame:
delete_item(frame))
delete_button.pack(side=tk.LEFT)
# 儲存圖像對象的參考
delete_button.image = tk_image
root.mainloop()
輸出結果:
TclError
是Tkinter中的一個異常類型,表示發生了與Tcl/Tk庫相關的錯誤。Tcl/Tk是Tkinter庫的底層實現,它提供了用於創建圖形用戶界面的工具和函數。
TclError
通常在以下情況下被觸發:
- 圖像文件不存在或無法讀取:當你指定一個無效的圖像文件路徑或圖像文件無法被讀取時,就會引發
TclError
錯誤。 - 無效的Tkinter對象或資源:當你嘗試訪問一個不存在的Tkinter對象或資源時,例如未初始化的對象、已經被刪除的對象,或者對象的屬性不存在,就可能引發
TclError
錯誤。 - Tcl/Tk庫操作失敗:在使用Tkinter庫時,與Tcl/Tk庫進行交互的操作可能會失敗,例如創建窗口、設置屬性、綁定事件等。當這些操作無法成功執行時,就會引發
TclError
錯誤。
當你遇到TclError
錯誤時,建議檢查相關的程式碼並確保沒有錯誤或無效的操作。特別要注意圖像文件的路徑是否正確、對象是否被正確初始化和訪問、庫操作是否按照正確的順序和方式執行。
推薦hahow線上學習python: https://igrape.net/30afN
近期留言