【发布时间】:2018-12-31 11:44:42
【问题描述】:
我正在尝试将照片绑定到列表框,但照片没有出现。
我尝试在此处拍摄特定的照片路径。使用上面相同的代码(在
choosePhoto中)并且它有效。由于某种原因,当在函数内部的代码中并将函数绑定到listBox时,照片没有出现。
我的代码:
from tkinter import *
from PIL import ImageTk, Image
from os import *
def openPath(path,listBox):
try:
path2=str(path)
list1= listdir(path2)
listBox.delete(0,END)
for i in range(len(list1)):
listBox.insert(i,list1[i])
except:
print("file does not exist")
def choosePhoto(event):
path=str(textFolder.get())+"\\"+str(listBoxPath.get(ACTIVE))
image1=ImageTk.PhotoImage(Image.open(path))
lbl.configure(image=image1)
print(path)
root = Tk()
root.geometry("450x600")
root.title("project image proccesor")
frame1=Frame(root,width=250,height=100)
frame1.pack(side=LEFT,fill=BOTH)
frame4=Frame(root,width=250,height=100)
frame4.pack(side=RIGHT,fill=BOTH)
lblFolder=Label(frame1,text="Enter folder path:")
lblFolder.grid(row=0,column=0)
textFolder=Entry(frame1,insertwidth=4)
textFolder.grid(rowspan=1,column=0)
listBoxPath=Listbox(frame1)
listBoxPath.grid(row=2)
bChoose=Button(frame1,text="Choose",command=lambda: openPath(textFolder.get(),listBoxPath)).grid(row=1,column=1)
lbl=Label(frame4, text="waiting for photo")
listBoxPath.bind('<<ListboxSelect>>', choosePhoto)
root.mainloop()
【问题讨论】:
-
'image1' 是
choosePhoto的局部变量。您需要将其定义为全局,以便在全局命名空间中保持活动状态。 -
另外,您没有对标签应用网格管理器,因此它永远不会出现在屏幕上。
-
@Martineau。我知道他们的三个问题之一与那个重复的帖子有关,但是 OP 遇到的问题更广泛。我认为不应将此帖子标记为重复,因为存在 3 个不同的问题阻止图像显示。
标签: python python-3.x tkinter listbox