我正试图在Tkinter中的水平行中放置一组图像。我通过循环一个列表,并从工作目录加载相应的图像来实现这一点。
我根据索引乘以一定的间距来放置图像。然而,当我实际放置图像时,它们都被放置在最后一个点的顶部,而不是隔开。计数值工作正常,当iprint(spacing*(count+1))
它输出正确的值时,但当放置它们时,它们都聚集在最后一个位置
这与Label()
类有关吗
for count, mood in enumerate(mood_options):
mood_img = Image.open(f"img/{mood}.png")
mood_img_copy = mood_img.resize(img_size, Image.ANTIALIAS)
mood_img_resized = ImageTk.PhotoImage(mood_img_copy)
mood_img_label = Label(root, image=mood_img_resized).place(relx=spacing*(count+1), rely=0.35)
print(spacing * (count + 1))
编辑:我使用了这个确切的方法来放置按钮,请参见以下内容:
for count, mood in enumerate(mood_options):
mood_btn = Button(root, text=mood.capitalize(), command=lambda mood=mood: register_mood(mood), width=7) \
.place(relx=(count + 1) * spacing, rely=0.5)
这是完美无瑕的,这让我想知道为什么它不适用于图像,而不是按钮
你的
spacing
是以像素为单位的实际空间量吗? 如果是这样,请不要使用relx
,而只使用x
relx
必须是介于0.0和1.0之间的浮点值如果相同的逻辑适用于按钮,那么问题可能是图像被垃圾收集,在这种情况下,您不能将图像存储为某个类的属性以保留引用,因为在每次迭代中,每个图像都将被覆盖,仅保留对最后一个图像的引用。同样的情况也发生在
global
上。因此,这里的方法是添加一个列表。尝试以下方法:尽管最好使用
grid
以类似网格的方式放置内容。如果您担心窗口的响应性,请查看weight
:相关问题 更多 >
编程相关推荐