gpt4 book ai didi

python - 使用路径数组显示图像对

转载 作者:行者123 更新时间:2023-12-01 09:07:04 25 4
gpt4 key购买 nike

我想加载一堆图像,将它们分成对,然后在窗口中并排显示这些对(一对对)。另外,我将添加一个按钮来选择要显示的对。

    def select_files():
files = filedialog.askopenfilenames(title="Select photo", filetypes=(("jpeg files", "*.jpg"), ("all files", "*.*")))
# many lines of code for the algorithm that splits images into pair
pairs.append([photo1, photo2])


root = Tk()

selectButton = Button(root, text="Select", command=select_files)
selectButton.place(x=5, y=500)


show_first = ImageTk.PhotoImage(img1)
show_second = ImageTk.PhotoImage(img2)

panel1 = Label(root, image=show_first)
panel1.place(x=5, y=5)

panel2 = Label(root, image=show_second)
panel2.place(x=200, y=5)


root.geometry("%dx%d+500+500" % (550, 550))
root.mainloop()

但是如何将图像传递给 show_first 和 show_second 呢?

附注在 pairs.append([photo1, photo2]) 行中 photo1photo2 都是列表,路径存储在 photo1[0] 和图像中照片1中的尺寸[1]

最佳答案

问题是 tkinter回调“不直接支持参数”并且“忽略返回值”。该问题可以通过使用 lambda 来解决使用默认参数并“使用可变对象(例如列表)作为默认参数,因为当回调函数修改它时,更改会反射(reflect)在调用者范围中。

例如,您可以定义 select_files带有一个参数,一个列表,这是一个您可以随意修改的可变参数

def select_files(pairs):
pairs.clear() # this voids the content of the list
# many lines of code for the algorithm that splits images into pairs
pairs.append(['a.jpg', 'b.jpg'])

然后,在您的 main 中,修改 command=...引入默认参数

pairs = []
...
selectButton = Button(root, text = "Select",
command = lambda pairs=pairs: select_files(pairs))

这样,最终您就可以访问每对图像文件名

for fn1, fn2 in pairs:
...

为了在实践中展示它,

>>> def gp(pairs):
... pairs.append([1,2])
...
>>> pairs = []
>>> (lambda p=pairs: gp(p))()
>>> pairs
[[1, 2]]
>>>

和一个反例

>>> def gp(pairs):
... pairs = [[1, 2]]
...
>>> pairs = []
>>> (lambda p=pairs: gp(p))()
>>> pairs
[]
>>>

这表明您不应该永远分配给函数参数...

关于python - 使用路径数组显示图像对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51955332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com