tkinter canvas 只更新错误
tkinter canvas only updates with an error
我正在编写一个代码,只要用户在 Treeview 小部件中选择一个项目,就会在 canvas 小部件中显示 .png。当我 运行 我的代码时,图像仅在 selectedItems 函数中抛出错误时显示在 canvas 中。到目前为止,它可以是任何错误,但除非抛出错误,否则不会显示图像。我试过插入时间延迟并使用调试工具,但我仍然不明白为什么会这样。当没有错误时,Treeview 仍会为所选项目生成索引,但 canvas 不会随图片一起更新。有人可以教育我吗?
import tkinter as tk
import tkinter.ttk as ttk
from PIL import Image, ImageTk
def selectedItems(event):
item = tree.selection()
item_iid = tree.selection()[0]
parent_iid= tree.parent(item_iid)
directory= r"..."
if tree.item(parent_iid, "text") != "":
imageFile= directory + tree.item(item_iid, "text")
image_o= Image.open(imageFile)
image_o.thumbnail([683, 384], Image.ANTIALIAS)
image1= ImageTk.PhotoImage(image_o)
canvas1.create_image((0, 0), anchor= "nw", image= image1)
a= 'hello' + 7
tree.bind("<<TreeviewSelect>>", selectedItems)
这是我得到的错误:
Traceback (most recent call last):
File "C:\Program Files\Python36\lib\tkinter\__init__.py", line 1699, in __call__
return self.func(*args)
File ".\front_end_DataManager.py", line 21, in selectedItems
a= 'hello' + 7
TypeError: must be str, not int
我知道类型错误之一。这是故意让图像显示。我认为问题出在 tkinter call 函数中。有什么想法吗?
您遇到了 tkinter 中的错误问题,该错误会从内存中删除分配给函数中局部变量的图像 - 然后它不会显示它。您必须将其分配给全局变量或 class.
参见代码中的 global
- 这样 image1
将是全局变量,而不是局部变量。
def selectedItems(event):
global image1
item = tree.selection()
item_iid = tree.selection()[0]
parent_iid = tree.parent(item_iid)
directory = r"..."
if tree.item(parent_iid, "text") != "":
imageFile = directory + tree.item(item_iid, "text")
image_o = Image.open(imageFile)
image_o.thumbnail([683, 384], Image.ANTIALIAS)
image1 = ImageTk.PhotoImage(image_o)
canvas1.create_image((0, 0), anchor= "nw", image= image1)
另请参阅页末 "Note:" The Tkinter PhotoImage Class
我正在编写一个代码,只要用户在 Treeview 小部件中选择一个项目,就会在 canvas 小部件中显示 .png。当我 运行 我的代码时,图像仅在 selectedItems 函数中抛出错误时显示在 canvas 中。到目前为止,它可以是任何错误,但除非抛出错误,否则不会显示图像。我试过插入时间延迟并使用调试工具,但我仍然不明白为什么会这样。当没有错误时,Treeview 仍会为所选项目生成索引,但 canvas 不会随图片一起更新。有人可以教育我吗?
import tkinter as tk
import tkinter.ttk as ttk
from PIL import Image, ImageTk
def selectedItems(event):
item = tree.selection()
item_iid = tree.selection()[0]
parent_iid= tree.parent(item_iid)
directory= r"..."
if tree.item(parent_iid, "text") != "":
imageFile= directory + tree.item(item_iid, "text")
image_o= Image.open(imageFile)
image_o.thumbnail([683, 384], Image.ANTIALIAS)
image1= ImageTk.PhotoImage(image_o)
canvas1.create_image((0, 0), anchor= "nw", image= image1)
a= 'hello' + 7
tree.bind("<<TreeviewSelect>>", selectedItems)
这是我得到的错误:
Traceback (most recent call last):
File "C:\Program Files\Python36\lib\tkinter\__init__.py", line 1699, in __call__
return self.func(*args)
File ".\front_end_DataManager.py", line 21, in selectedItems
a= 'hello' + 7
TypeError: must be str, not int
我知道类型错误之一。这是故意让图像显示。我认为问题出在 tkinter call 函数中。有什么想法吗?
您遇到了 tkinter 中的错误问题,该错误会从内存中删除分配给函数中局部变量的图像 - 然后它不会显示它。您必须将其分配给全局变量或 class.
参见代码中的 global
- 这样 image1
将是全局变量,而不是局部变量。
def selectedItems(event):
global image1
item = tree.selection()
item_iid = tree.selection()[0]
parent_iid = tree.parent(item_iid)
directory = r"..."
if tree.item(parent_iid, "text") != "":
imageFile = directory + tree.item(item_iid, "text")
image_o = Image.open(imageFile)
image_o.thumbnail([683, 384], Image.ANTIALIAS)
image1 = ImageTk.PhotoImage(image_o)
canvas1.create_image((0, 0), anchor= "nw", image= image1)
另请参阅页末 "Note:" The Tkinter PhotoImage Class