사용자가 이미지가있는 폴더를 선택하고 각 이미지에 사용자의 클릭 좌표를 저장할 수있는 스크립트를 작성하려고합니다. 이렇게하려면 각 이미지 파일을 Tkinter 캔버스에 표시하고 클릭 위치를 저장 한 다음 캔버스가 닫히면 다음 이미지를 열고 싶습니다.Python에서 Tkinter canvas로 이미지 반복하기
아래와 같은 코드로 단일 이미지에서이 기능을 사용할 수 있습니다 (this question에서 수정). for File in imgs
루프가 다음 이미지를 계속 열어주기를 기대했지만 그럴 수는 없습니다. 나는 Tkinter가 다른 이미지를 열라고 알려주기 위해 on_closing
함수가 필요하다고 생각합니다.
Tkinter가 이미지를 닫은 후 다음 이미지를 열려면 적절한 방법은 무엇입니까?
또한는 Tkinter.PhotoImage
로는 Tkinter에 내장 된 파일에서 이미지를로드하기 때문에 ImageTk를 사용할 필요는 없다 참고 : 대신 라벨을 사용할 수 있는지
from Tkinter import *
from tkFileDialog import askopenfilenames, askopenfilename, askdirectory
from PIL import Image, ImageTk
import cv2
import numpy as np
import os
if __name__ == "__main__":
root = Tk()
#setting up a tkinter canvas with scrollbars
frame = Frame(width=1920, height=1080, bd=2, relief=SUNKEN)
frame.grid_rowconfigure(0, weight=1)
frame.grid_columnconfigure(0, weight=1)
xscroll = Scrollbar(frame, orient=HORIZONTAL)
xscroll.grid(row=1, column=0, sticky=E+W)
yscroll = Scrollbar(frame)
yscroll.grid(row=0, column=1, sticky=N+S)
canvas = Canvas(frame, bd=0, xscrollcommand=xscroll.set, yscrollcommand=yscroll.set)
canvas.config(width=1920, height=1080)
canvas.grid(row=0, column=0, sticky=N+S+E+W)
xscroll.config(command=canvas.xview)
yscroll.config(command=canvas.yview)
frame.pack(fill=BOTH,expand=1)
# Function to be called when mouse is clicked
def save_coords(event):
coords.append([event.x, event.y])
# def on_closing():
# Open the next image file
# Create empty list for coordinate arrays to be appended to
coords = []
# Choose multiple images
img_dir = askdirectory(parent=root, initialdir="D:/Temp/", title='Choose folder')
os.chdir(img_dir)
imgs = os.listdir(img_dir)
#imgs = askopenfilenames(parent=root, initialdir="D:/Temp/cvCal/", title='Choose images')
for File in imgs:
img = ImageTk.PhotoImage(Image.open(File).resize((1280,720), Image.ANTIALIAS))
canvas.create_image(0,0,image=img,anchor="nw")
canvas.config(scrollregion=canvas.bbox(ALL))
canvas.bind("<Button 1>",save_coords)
# on_closing()...
root.mainloop()
왜 이미지가 표시되는 대신 캔버스를 사용 하시겠습니까? 스크롤 할 수있는 이미지가 필요합니까? – Novel
스크롤 할 필요가 없으며 클릭 위치를 가져와야합니다. 나는 라벨 위젯을 사용한 적이 없으므로 나는 당신의 질문에 대한 좋은 답변을 정말로 가지고 있지 않다. 그러나 나는 제안에 개방적이다. – Bird