Tkinter:配置多个带有图像的按钮



我有一个函数,它采用图像文件的名称并使用image属性创建它们的网格作为按钮,这就是问题出现的地方,因为我需要按钮对象来创建图像,这是由于我的fit_image()的另一个函数(在这种情况下,它完全适合对象内的图像,因此full=True)。运行此命令而不向这些按钮添加图像的结果很好,并且所有按钮都是可点击的:

self.image_buttons = {}
count = 0
# goes by column
for y in range(height_divisor):
# row
for x in range(width_divisor):
self.image_buttons[count] = tk.Button(self.preview_frame)
self.image_buttons[count].place(
relx=0 + (1 / width_divisor * x),
rely=0 + (1 / height_divisor * y),
relwidth=1 / width_divisor,
relheight=1 / height_divisor,
anchor="nw",
)
# self.current_image = fit_image(
#     Image.open(names_of_files[count]), self.image_buttons[count], full=True
# )
# self.image_buttons[count].configure(image=self.current_image)
count += 1

print(self.image_buttons)

打印语句的结果:

{0: <tkinter.Button object .!toplevel2.!frame2.!button>, 1: <tkinter.Button object .!toplevel2.!frame2.!button2>, 2: <tkinter.Button object .!toplevel2.!frame2.!button3>, 3: <tkinter.Button object .!toplevel2.!frame2.!button4>}
然而,一旦我取消注释这段代码,只有最后一个按钮是可点击的,并且确实有上面的图像,但其他的都是空白的,不能点击按钮。我曾尝试将注释(图像配置)行放在单独的for循环中,然后通过并配置每个按钮都无济于事。虽然我以前做过这个工作,甚至尝试梳理我的repo的提交(8月8日之前的任何内容都不应该相关),看看它以前是如何工作的,它一定是工作的,然后我很可能在提交之前破坏了它。

这是解决感谢@jasonharper的评论通过改变这两行并添加一个新的字典:

self.image_buttons, self.images = {}, {}
#for loops here
self.images[count] = fit_image(
Image.open(names_of_files[count]), self.image_buttons[count], full=True
)
self.image_buttons[count].configure(image=self.images[count])

相关内容

  • 没有找到相关文章

最新更新