PIL: переход к следующей фотографии после события одного клика - PullRequest
0 голосов
/ 15 ноября 2018

Я готовлю данные для глубокого запуска.Поэтому я должен получить определенные пиксельные координаты для каждого изображения.Требуется только одна координата на фотографию.Поэтому, когда я использую PIL для ввода одного клика, я пытаюсь реализовать координаты, чтобы перейти к следующей картинке.Однако когда я пишу код, как показано ниже, координаты выводятся в двух экземплярах только на одно изображение, а следующее изображение не появляется на экране.Как я могу убедиться, что только одна координата записана на одном изображении?

from PIL import Image, ImageTk
import tkinter

import os
URL = './SavedImage/'
imgList = os.listdir(URL)
print(imgList)
width = 852
height = 480
stepW = 852/4
stepH = 480/5
def callback(event):
   print("clicked at: ", event.x, event.y)

window = tkinter.Tk(className='pla')
for file in sorted(imgList):
    a=True
    image = Image.open(os.path.join(URL, file))
    print(image)
    canvas = tkinter.Canvas(window, width=image.size[0], height=image.size[1])
    canvas.pack()
    image_tk = ImageTk.PhotoImage(image)
    canvas.create_image(image.size[0]//2, image.size[1]//2, image=image_tk)
    canvas.bind("<Button-1>", callback)
    tkinter.mainloop()

1 Ответ

0 голосов
/ 15 ноября 2018

Я не уверен на 100%, что понимаю, что вам нужно, но мне кажется, вы пытаетесь получить один набор кабелей для каждого изображения в списке изображений.

Я бы сделал это, создав функцию и переменную отслеживания, чтобы циклически проходить по каждому изображению за раз, и по щелчку обновить новый список с изображением, а затем выполнить цикл к следующему изображению.

Дайте мне знать, если у вас есть какие-либо вопросы.

Пример:

from PIL import Image, ImageTk
import tkinter
import os

URL = './SavedImage/'
imgList = os.listdir(URL)
width = 852
height = 480
stepW = 852/4
stepH = 480/5
tracker = 0
list_images_with_cords = [] # added list for final results

def callback(event):
    # Added global's.
    global tracker,list_images_with_cords
    # Used to append final results to list.
    list_images_with_cords.append([imgList[tracker], event.x, event.y])
    # This tracker lets us go through each item on the list.
    tracker += 1
    # After appending list go to next image.
    open_next()

window = tkinter.Tk(className='pla')
# Creates just one canvas that we can update later.
canvas = tkinter.Canvas(window)
canvas.pack()

def open_next():
    # Adding global's.
    global image, canvas, image_tk, tracker
    # Clearing canvas before drawing new image.
    canvas.delete("all")
    # Checking for valid index in list.
    if tracker < len(imgList):
        image = Image.open(os.path.join(URL, imgList[tracker]))
        # use config() to update canvas.
        canvas.config(width=image.size[0], height=image.size[1])
        image_tk = ImageTk.PhotoImage(image)
        canvas.create_image(image.size[0]//2, image.size[1]//2, image=image_tk)
        canvas.bind("<Button-1>", callback)
    else:
        # This else statement is just for when we run out of images.
        # It will display all the results in a textbox.
        canvas.destroy()
        txt = tkinter.Text(window, width=25)
        txt.pack()
        for item in list_images_with_cords:
            txt.insert("end", "{}\n\n".format(item))

open_next()
tkinter.mainloop()
...