首页 > 解决方案 > 单击按钮时跳过文件 [tkinter + Python 3.5]

问题描述

filedir假设我想通过 tkinter 控制台查看的目录中有“n”个图像文件。现在,我想在必要时跳过一些文件,使用调用函数的按钮单击事件nextFile()

例如

import os


def nextFile():
    global img
    img_2 = process(img)
    return img_2


window = tk.Tk()
window.title("File Viewer")
files = os.listdir(filedir)
button1 = tk.Button(window, text="Browse Files...", fg="black", command=askopenfilename)
button2 = tk.Button(window, text="SELECT", width=50, command=nextFile)
canvas = tk.Canvas(window, width=width, height=height)
button1.pack(side=tk.LEFT)
button2.pack(side=tk.BOTTOM)
canvas.pack()

for f in files:
    img = cv2.cvtColor(cv2.imread(filedir + '/' + f), cv2.COLOR_BGR2RGB)
    photo = ImageTk.PhotoImage(image=Image.fromarray((img))
    canvas.create_image(0, 0, image=photo, anchor=tk.CENTER)

window.mainloop() 

任何帮助表示赞赏。谢谢!

标签: python-3.ximagetkinter

解决方案


这是一个使用 PIL 加载初始图像然后使用按钮和函数加载每个下一个图像的简单示例。

import tkinter as tk
from PIL import ImageTk, Image
import os

path = 'C:/your/file/path/here'

def nextFile():
    # the global is needed to keep track of current index and also keep
    # a reference of the image being displayed so its is not garbage collected.
    global current_ndex, image
    current_ndex += 1
    if current_ndex < len(files):
        img = Image.open('{}/{}'.format(path, files[current_ndex]))
        image = ImageTk.PhotoImage(img)
        # clear the canvas before adding the new image.
        canvas.delete("all")
        canvas.create_image(0, 0, image=image, anchor=tk.CENTER)


my_window = tk.Tk()
my_window.title("File Viewer")
files = os.listdir(path)

current_ndex = 0

button2 = tk.Button(my_window, text="Next", width=50, command=nextFile)
canvas = tk.Canvas(my_window, width=100, height=100)
button2.pack(side=tk.BOTTOM)
canvas.pack()

first_image = files[0]

img = Image.open('{}/{}'.format(path, first_image))
image = ImageTk.PhotoImage(img)
canvas.create_image(0, 0, image=image, anchor=tk.CENTER)
my_window.mainloop()

推荐阅读