Есть три проблемы, которые я вижу здесь в вашем коде.
1-й.Вам необходимо определить image1 как глобальное, потому что это изображение в настоящее время является локальной переменной в функции, и после завершения функции изображения удаляются, если вы не определите его в глобальном пространстве имен.
2nd.Ваша метка, которая используется для отображения изображений, еще не размещена на экране.Вам нужно использовать некоторый менеджер геометрии (вероятно, grid()
) в этом случае для отображения изображения.
3-ий.В настоящее время вы используете ACTIVE
в вашем списке выбора.Это приведет к тому, что вы выберете то, что было активным до нажатия, вместо того, что вы только что нажали.
Измените это:
list_box_path.get(ACTIVE)
на следующее:
list_box_path.get(list_box_path.curselection())
Я немного очистил ваш код, чтобы он более точно соответствовал стандарту PEP8, и добавил некоторые незначительные изменения и уменьшенный фрагмент кода, которые не были нужны.
import tkinter as tk
from PIL import ImageTk, Image
from os import listdir
def open_path(path):
try:
list1 = listdir(path)
list_box_path.delete(0, "end")
for i in range(len(list1)):
list_box_path.insert(i, list1[i])
except:
print("file does not exist")
def choose_photo(event):
global image1
path = Image.open("{}\\{}".format(text_folder.get(), list_box_path.get(list_box_path.curselection())))
image1 = ImageTk.PhotoImage(path)
lbl.configure(image=image1)
root = tk.Tk()
root.geometry("450x600")
root.title("project image processor")
frame1 = tk.Frame(root, width=250, height=100)
frame4 = tk.Frame(root, width=250, height=100)
lbl_folder = tk.Label(frame1, text="Enter folder path:")
text_folder = tk.Entry(frame1, insertwidth=4)
list_box_path = tk.Listbox(frame1)
b_choose = tk.Button(frame1, text="Choose", command=lambda: open_path(text_folder.get()))
lbl = tk.Label(frame4, text="waiting for photo")
frame1.pack(side="left", fill="both")
frame4.pack(side="right", fill="both")
lbl_folder.grid(row=0, column=0)
text_folder.grid(rowspan=1, column=0)
list_box_path.grid(row=2)
b_choose.grid(row=1, column=1)
lbl.grid(row=0, column=0)
list_box_path.bind('<<ListboxSelect>>', choose_photo)
root.mainloop()