【发布时间】:2018-07-10 13:43:17
【问题描述】:
我正在创建一个带有“.grid”按钮的 GUI。我想让每个按钮在按下时显示不同的图像。因此,当我单击按钮 1 时,它会在按钮底部显示 "image1"。当我点击按钮 2 时,它会弹出 "image2" 等等。
通过一些研究,我能够使按钮运行一个通过以下方法接收参数的函数。但是,我似乎无法让按钮显示图像。相反,当我按下任何按钮时,它只会在按钮下方留出一个空白区域。
免责声明: - 我不希望有很多图片,只有一张图片,它会根据我按下的按钮而改变。
代码如下:
from tkinter import *
def funct(numimg):
image = PhotoImage(file="image"+str(numimg)+".png")
label = Label(image=image)
label.grid(row = row_no+1, column = 0, columnspan = num_of_cols)
def make_funct(number):
return (lambda: funct(number))
root= Tk()
row_no = -1
buttons = []
num_of_cols = 3
root.resizable(0, 0)
numfiles = 6
for x in range(0, numfiles):
if(x % num_of_cols is 0):
row_no+=1
buttons.append(Button(root, text = "Button "+str(x), bg = '#4098D3', width = 30,height = 13,command = make_funct(x)))
buttons[x].grid(row = row_no, column = x % num_of_cols)
root.mainloop()
所以我的问题是,如何让每个单独的按钮在按下时显示不同的图像?这个程序在这里只是留下一个空白区域来替换图像,并且图片未显示。
【问题讨论】:
-
您必须明确保留对 Tkinter 图像的引用,否则它们将被垃圾收集 - 仅具有显示图像的小部件不算作引用。将
image设为全局变量将是您代码中最简单的解决方案。此外,您说您一次只想要一张图像,但实际上您创建了无限数量的标签来保存它们,所有标签都堆积在同一个网格单元中。在启动期间创建一个标签,然后根据需要重新配置其图像属性。 -
哇。这实际上马上就奏效了。我将图像设置为全局变量,现在它似乎按我的预期工作。我了解标签将如何堆叠在同一个网格单元中,但是当它在函数(函数)内部时,我将如何“重新配置”它们?对不起,如果这是一个明显的问题——我是 tkinter 中 gui 的新手。谢谢!