我已阅读有关如何保存图片的所有帖子,因此不会收集垃圾。所以在下面的代码中我通过添加self.mapimage.image = self.map来完成。这有效,但我收到此回调错误: AttributeError:'int'对象没有属性'image'。该错误后程序继续工作。我们将非常感谢世界各地Tkinter专家提供的任何帮助。
类OpenClose:
def __init__(self, pullcat, pullitem):
self.pullcat = pullcat
self.pullitem = pullitem
def openfile(self):
if self.pullitem == 'Watershed':
self.watfile = filedialog.askopenfilename(filetypes = (("Watershed Files", "*.wshed"), ("All files", "*.*")))
elif self.pullitem == 'Devices':
self.devfile = filedialog.askopenfilename(filetypes = (("Devices", "*.dev"), ("All files", "*.*")))
elif self.pullitem == 'ModelSettings':
self.setfile = filedialog.askopenfilename(filetypes = (("Settings", "*.set"), ("All files", "*.*")))
elif self.pullitem == 'Map':
self.mapfile = filedialog.askopenfilename(filetypes = (("Map", "*.gif"), ("All files", "*.*")))
self.map = PhotoImage(file = self.mapfile)
self.mapimage = guiset.getcanob().create_image(640,480, image = self.map)
self.mapimage.image = self.map
答案 0 :(得分:1)
create_image
返回一个int,用作画布图像的标识符。您需要对图像的不同引用。这条线
self.map = PhotoImage(file = self.mapfile)
就足够了。它为您提供了对图像的永久引用,因此不会被垃圾收集。只需删除
行即可self.mapimage.image = self.map
你应该没问题。 (如果您只有map
而不是self.map
,那么当openfile
完成时,这将是一个超出范围的局部变量,并且您的图像将被垃圾收集。但是因为{{1你是self.map
的一个属性,在对象被销毁之前你会得到一个图像的引用。)