Python3.8 + Tkinter: Button設(shè)置image屬性不顯示的問題及解決方法
Bug如題目所描述。嘗試過將按鈕的image指向的變量del_icon設(shè)置為global全局變量,但是不成功,會提示如“
AttributeError: 'PhotoImage' object has no attribute '_PhotoImage__photo'
”的錯誤。代碼1是導(dǎo)致bug的源頭。
代碼1:
#!/bin/env python3
from PIL import ImageTk
import tkinter as tk
...
self.del_button = tk.Button(self.frame, text='DEL', width=20, height=20)
self.del_button.config(image=ImageTk.PhotoImage(resize(os.getcwd() + '/delete.png', 0)))
self.del_button.bind('<Button-1>', self.delete_selected_image)
self.del_button.grid(row=0, column=0, sticky=tk.W)

結(jié)果刪除按鈕不顯示image,按鈕上顯示空白:
嘗試將del_button的image指向的變量設(shè)置為局部變量,即下面所展示的代碼2。
代碼2:
#!/bin/env python3
from PIL import ImageTk
import tkinter as tk
...
self.del_button = tk.Button(self.frame, text='DEL', width=20, height=20)
del_icon = ImageTk.PhotoImage(resize(os.getcwd()+'/delete.png', 0))
self.del_button.config(image=del_icon)
self.del_button.bind('<Button-1>', self.delete_selected_image)
self.del_button.grid(row=0, column=0, sticky=tk.W)

結(jié)果刪除按鈕的image顯示正常:
筆記:
不明所以的bug。判斷潛在原因是:GC的問題。image屬性需要指向明確的內(nèi)存地址。方法返回的臨時變量地址調(diào)用后即被回收,導(dǎo)致image指向空地址。
resize()的代碼:
#!/bin/env python3
from PIL import Image
def resize(path):
image = Image.open(path)
raw_width, raw_height = image.size[0], image.size[1]
min_height = 20
min_width = int(raw_width * min_height / raw_height)
return image.resize((min_width, min_height))
到此這篇關(guān)于Python3.8 + Tkinter: Button設(shè)置image屬性不顯示的問題的文章就介紹到這了,更多相關(guān)Python Tkinter按鈕不顯示內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何從csv文件構(gòu)建Tensorflow的數(shù)據(jù)集
這篇文章主要介紹了如何從csv文件構(gòu)建Tensorflow的數(shù)據(jù)集,幫助大家更好的理解和使用Tensorflow,感興趣的朋友可以了解下2020-09-09
Python中canmatrix解析dbc文件應(yīng)用常見示例
DBC是一種用于描述CAN網(wǎng)絡(luò)協(xié)議的文件格式,Python作為一種流行的編程語言,也提供了解析DBC文件的相關(guān)類庫,這篇文章主要給大家介紹了關(guān)于Python中canmatrix解析dbc文件的相關(guān)資料,需要的朋友可以參考下2024-08-08
pandas讀取csv格式數(shù)據(jù)時header參數(shù)設(shè)置方法
本文主要介紹了pandas讀取csv格式數(shù)據(jù)時header參數(shù)設(shè)置方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02
Sublime?Text?配置?Python?環(huán)境的問題及解決方案
這篇文章主要介紹了Sublime?Text?配置?Python?環(huán)境的問題,文中介紹了python自定義的構(gòu)建系統(tǒng)的完整代碼,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-01-01
Python:pycharm中虛擬環(huán)境venv的使用及說明
文章介紹了虛擬環(huán)境的必要性和實踐方法,虛擬環(huán)境可以幫助用戶管理不同項目所需的Python版本和第三方模塊,避免版本沖突和模塊沖突,文章詳細介紹了如何使用Python自帶的`venv`模塊創(chuàng)建和管理虛擬環(huán)境,并通過命令行和PyCharm兩種方式構(gòu)建虛擬環(huán)境2025-01-01

