[英]_tkinter.TclError: image “…” doesn't exist _ ImageGrab.grab()
Summary of code purpose: change tk.Button['image'] to either selected file, or screen snip代码目的摘要:将 tk.Button['image'] 更改为选定文件或屏幕截图
I'm getting this error:我收到此错误:
_tkinter.TclError: image "<PIL.Image.Image image mode=RGB size=600x400 at 0x34045F0>" doesn't exist
But I can't understand why it doesn't exist since if I use print(self.image_selected)
I get但我不明白为什么它不存在,因为如果我使用print(self.image_selected)
我得到
<PIL.Image.Image image mode=RGB size=600x400 at 0x3D16650>
Does it need to be a global variable?它需要是一个全局变量吗? Doesn't adding self
take care of that?添加self
不会解决这个问题吗?
CODE代码
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,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()
I tested the program, and as you stated, the 'snip' button gave me the error.我测试了程序,正如你所说,“snip”按钮给了我错误。 I could fix it by changing the format of the image to a ImageTk.PhotoImage
.我可以通过将图像格式更改为ImageTk.PhotoImage
来修复它。
def Snip(self, master):
self.image_selected = ImageTk.PhotoImage(ImageGrab.grab(bbox=(0,0,600,400)))
self.changeImg()
I have to say, though, that the photo showed on the button icon after selecting the image was weird, but I guess it was because i tested it with the wrong resolution;不过,我不得不说,选择图像后按钮图标上显示的照片很奇怪,但我想这是因为我用错误的分辨率测试它; ;) ;)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.