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

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

该程序应生成多个图像,同时在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()
```





我认为你在这里遇到的问题是由以下原因引起的

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

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

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