簡體   English   中英

Tkinter 幀內多圖像查看器

[英]Tkinter Multiple Image Viewer within Frame

我想為照片預覽器制作 window 結構。 我被困住了。 我的代碼不起作用。 我制作了如下所示的框架層次結構。 我想在縮略圖框中顯示縮略圖。 在此處輸入圖像描述

# TODO 0: IMPORT REQUIRED LIBRARIES AND MODULES
from tkinter import *
from PIL import Image, ImageTk


# TODO 1: CREATE A CLASS
class EditScreen:
    def __init__(self, file_directory_list):
        self.edit_window_init()
        self.file_directory_list = file_directory_list
        self.display_selected_images()
        self.edit_window.mainloop()

# TODO 2: CREATE A NEW EDIT SCREEN
    def edit_window_init(self):
        self.edit_window = Toplevel()
        self.edit_window.title("Edit")
        self.edit_window.geometry('1200x800')
        self.background_color = "#F8F1F1"
        self.my_font_color = "#0A065D"
        self.my_font = 'Poppins'

# TODO 3: DISPLAY SELECTED IMAGES IN THIS SCREEN
    def display_selected_images(self):
        thumbnail_frame = Frame(self.edit_window, height=1200, width=300)
        thumbnail_frame.pack(side='left')
        thumbnail_frame_canvas= Canvas(master=thumbnail_frame)
        thumbnail_frame_canvas.place(x=0,y=0)
# TODO 3.1: PUT ALL SELECTED IMAGES THUMBNAIL TO LEFT HAND SIDE OF THE EDIT SCREEN
        for selected_image_directory in self.file_directory_list:
            print(self.file_directory_list.index(selected_image_directory))
            selected_image = ImageTk.PhotoImage(file=selected_image_directory)
            selected_image_location = thumbnail_frame_canvas.create_image((30,30),image=selected_image)
            selected_image_location.pack()
            #.grid(row=self.file_directory_list.index(selected_image_directory),column=0)

考慮這些代碼行:

selected_image_location = thumbnail_frame_canvas.create_image((30,30),image=selected_image)
selected_image_location.pack()

create_image記錄為返回 integer,它是創建的 canvas object 的內部 id。 然后,您嘗試在 integer 上調用pack ,但整數沒有pack方法。 您需要刪除對pack的調用

在對您的問題的評論中提到了另一個問題: 您沒有保存對 image 的引用,因此它將被 python 的垃圾收集器破壞。

您可以使用全局列表保存參考,並將圖像附加到該列表:

def display_selected_images(self):
    global selected_images
    ...
    selected_images = []
    for selected_image_directory in self.file_directory_list:
        ...
        selected_image = ImageTk.PhotoImage(file=selected_image_directory)
        selected_images.append(selected_image)
        ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM