我的列表应该有4张tkinter图像,但它只生成2张照片

2024-09-30 14:16:35 发布

您现在位置:Python中文网/ 问答频道 /正文

该程序应生成多个图像,同时在y和x截距上绘制特定点。但出于某种原因,它只会弹出两张图像。第一个图像是列表中最后一个y和x中间字符串。第二个图像是.after之后的代码。它应该获取所有列表值并将其转换为具有正确y和x inter的图像。所以应该有4张图片。请自己运行代码并帮助我。如果你能弄明白的话,请给我看一下更新后的代码

from tkinter import *
from PIL import ImageTk, Image


def ShowAnotherWin(i):
    win = Toplevel()
    image = ImageTk.PhotoImage(Image.open('C:/Users/capture.PNG'))
    win.geometry('420x544+' + i + '+' + i)
    canvas =Canvas(win, width=420, height=560)
    canvas.create_image(0, 0, image= image, anchor=NW)
    canvas.pack()
    win.overrideredirect(1) 
    win.mainloop()


YourImageList = ['0', '50', '100', '150']


root = Tk()
for i in YourImageList:
    root.after(0, lambda:ShowAnotherWin(i))


image = ImageTk.PhotoImage(Image.open('C:/Users/capture.PNG'))
root.geometry('420x560+1000+0')
canvas = Canvas(root, width=420, height=560)
canvas.create_image(0, 0, image= image, anchor=NW)
canvas.pack()
root.overrideredirect(1)
root.mainloop()
```





Tags: 代码from图像imageimport列表rootopen
1条回答
网友
1楼 · 发布于 2024-09-30 14:16:35

我认为你在这里遇到的问题是由late binding引起的

当闭包变量i被传递到ShowAnotherWin()时,for循环已经完成,并且i的最终值为'150'。这是因为在调用函数时会查找闭包变量

要解决此问题,可以使用lambda闭包的默认参数,该参数将立即绑定:

for i in YourImageList:
    root.after(0, lambda i=i: ShowAnotherWin(i))

相关问题 更多 >

    热门问题