我從類中的維基百科獲取圖片并將它們添加到字典中,當我想回傳它并將結果添加到標簽影像時,我收到錯誤
import tkinter as tk
import urllib.request
from PIL import Image, ImageTk
from io import BytesIO
import time
image_dat = {}
class add:
def __init__(self, url):
self.test(url)
def test(self, url):
if url not in image_dat.keys():
u = urllib.request.urlopen(url)
raw_data = u.read()
u.close()
im = Image.open(BytesIO(raw_data))
im = im.resize((25, 25), Image.ANTIALIAS)
photo = ImageTk.PhotoImage(im)
photo.im = photo
image_dat[url] = photo
return image_dat[url]
if __name__ == '__main__':
root = tk.Tk()
label = tk.Label()
label.pack()
img = add("https://upload.wikimedia.org/wikipedia/commons/f/fb/Check-Logo.png")
label['image'] = img
tk.mainloop()
錯誤
uj5u.com熱心網友回復:
這個錯誤是因為從test函式回傳后,類的建構式沒有回傳影像物件add。
例如,只是為了測驗,如果在test函式中這樣做:
.
.
photo.im = photo
image_dat[url] = photo
#if created a label here with that image, it will work fine:
label = tk.Label(root, image=image_dat[url])
label.pack()
這樣你就不會出錯。這表明在函式內部撰寫的代碼一切test正常。
因此,為了修復問題中給出的代碼:
由于建構式__init__()只能回傳None,如果你想在呼叫類時回傳一些其他物件,那么使用該__new__()方法。
.
.
class add:
def __new__(cls, url):
return cls.test(url)
def test(url):
.
.
使用這些更改,您的問題將得到解決。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/471340.html
