私は、画像を含むフォルダを選択して各画像にユーザのクリック座標を保存するスクリプトを作成しようとしています。これを行うには、各画像ファイルをTkinterキャンバスに表示し、クリック位置を保存してから、キャンバスを閉じたときに次の画像を開きたいと思います。PythonでTkinterキャンバスを使って画像をループする
これは、以下のコード(this questionに適合)を使用して1つの画像で動作するようになります。私はfor File in imgs
ループが次の画像を開いたままにしておくことを望んでいましたが、そうではありません。私はon_closing
関数がTkinterに別のイメージを開くように伝える必要があると思います。
画像を閉じた後、Tkinterに次の画像を開く適切な方法はありますか?
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
それはスクロール可能である必要はありません、私はちょうどクリック位置を取得する必要があります。私はLabelウィジェットを一度も使用していないので、あなたの質問には良い答えはありませんが、私は提案には触れています。 – Bird