如何解决_tkinter.TclError:图像“ ...”不存在_ ImageGrab.grab
代码摘要:将tk.Button ['image']更改为所选文件或屏幕截图
我收到此错误:
_tkinter.TclError: image "<PIL.Image.Image image mode=RGB size=600x400 at 0x34045F0>" doesn't exist
但是我不明白为什么它不存在,因为如果我使用print(self.image_selected)
,我会得到
<PIL.Image.Image image mode=RGB size=600x400 at 0x3D16650>
是否需要是全局变量?不添加self
可以解决此问题吗?
代码
import tkinter as tk
from tkinter import filedialog
from PIL import ImageGrab,ImageTk
class MCVE():
def __init__(self,master):
self.master = master
self.ButtonOne = tk.Button(text="start",width=30,height=30,command = lambda: self.GetImg(master))
self.ButtonOne.pack()
self.image_selected = None
def GetImg(self,master):
self.newWin = tk.Toplevel(self.master)
self.ButtonTwo = tk.Button(self.newWin,text="snip",command = lambda: self.Snip(self.master))
self.ButtonThree = tk.Button(self.newWin,text="open",command = lambda: self.FileO(self.master))
self.ButtonTwo.pack()
self.ButtonThree.pack()
def Snip(self,master):
self.image_selected = ImageGrab.grab(bbox=(0,600,400))
self.changeImg()
def FileO(self,master):
ret = filedialog.askopenfilename() # filedialog.askopenfilename(initialdir='/home/user/images/')
if ret:
self.image_selected = ImageTk.PhotoImage(file=ret)
self.changeImg()
def changeImg(self):
if self.image_selected:
print(self.image_selected)
#self.ButtonOne['image'] = self.image_selected
self.ButtonOne.config(image=self.image_selected)
def main():
root = tk.Tk()
MCVE(root)
root.mainloop()
if __name__ == '__main__':
main()
解决方法
我测试了该程序,正如您所说,“ snip”按钮给了我错误。我可以通过将图像格式更改为ImageTk.PhotoImage
来解决它。
def Snip(self,master):
self.image_selected = ImageTk.PhotoImage(ImageGrab.grab(bbox=(0,600,400)))
self.changeImg()
我不得不说,选择图像后在按钮图标上显示的照片很奇怪,但是我想这是因为我以错误的分辨率对其进行了测试! ;)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。