[我正在尝试使用Tkinter构建图像查看器,但我陷于这个奇怪的问题中

问题描述 投票:0回答:1

我有此前进箭头按钮,单击该按钮应显示picturesList中的下一张图像。初始图像工作正常,但是当我单击“前进”按钮时,我得到了这个图像。

Before Clicking

enter image description here

After Clicking:

enter image description here

我正在添加整个代码,因为我无法真正理解问题所在,对此深表歉意。

from tkinter import *
from PIL import ImageTk, Image
import os

def moveForward():
    global currImageIndex
    global imgLabel
    currImageIndex += 1

    imgLabel.grid_forget()
    print(picturesList)
    img = ImageTk.PhotoImage(Image.open(picturesList[currImageIndex]))
    imgLabel = Label(root,image=img)
    imgLabel.grid(row=0,column=1)

picturesList = []
for pictures in os.listdir('images'):
    if pictures.startswith('img'):
        picturesList.append('images/'+pictures)

currImageIndex = 0

root = Tk()

img = ImageTk.PhotoImage(Image.open("images/img5.jpg"))
imgLabel = Label(image=img)
imgLabel.grid(row=0,column=1)

backwardImg = ImageTk.PhotoImage(Image.open("images/backward.ico"))
backButton = Button(image=backwardImg,width=80,height=80,relief=FLAT)
backButton.grid(row=0,column=0)


forwardImg = ImageTk.PhotoImage(Image.open("images/forward.ico"))
forwardButton = Button(image=forwardImg, width=80, height=80, relief=FLAT, command=moveForward)
forwardButton.grid(row=0,column=2)

root.mainloop()
python tkinter pypy
1个回答
0
投票

保留对图像的引用

from tkinter import *
from PIL import ImageTk, Image
import os

def moveForward():
    global current_img
    global currImageIndex
    global imgLabel
    currImageIndex += 1

    imgLabel.grid_forget()
    print(picturesList)
    img = ImageTk.PhotoImage(Image.open(picturesList[currImageIndex]))
    current_img = img
    imgLabel = Label(root,image=img)
    imgLabel.grid(row=0,column=1)

picturesList = []

#Here is the variable where the reference will be stored
current_img = None
for pictures in os.listdir('images'):
    if pictures.startswith('img'):
        picturesList.append('images/'+pictures)

currImageIndex = 0

root = Tk()

img = ImageTk.PhotoImage(Image.open("images/img5.jpg"))
imgLabel = Label(image=img)
imgLabel.grid(row=0,column=1)

backwardImg = ImageTk.PhotoImage(Image.open("images/backward.ico"))
backButton = Button(image=backwardImg,width=80,height=80,relief=FLAT)
backButton.grid(row=0,column=0)


forwardImg = ImageTk.PhotoImage(Image.open("images/forward.ico"))
forwardButton = Button(image=forwardImg, width=80, height=80, relief=FLAT, command=moveForward)
forwardButton.grid(row=0,column=2)

root.mainloop()
© www.soinside.com 2019 - 2024. All rights reserved.