gpt4 book ai didi

python - 如何使用 tkinter (python) 让每个按钮在单击时显示不同的图像

转载 作者:行者123 更新时间:2023-12-01 09:15:48 30 4
gpt4 key购买 nike

我正在创建一个带有“.grid”按钮的 GUI。我想让每个按钮在按下时显示不同的图像。因此,当我单击按钮 1 时,它将在按钮底部显示“image1”。当我点击按钮 2 时,它会显示“image2”等。

通过一些研究,我能够使按钮运行一个通过以下方法接收参数的函数。但是,我似乎无法让按钮显示图像。相反,当我按下任何按钮时,它只是在按钮下方形成一个空白区域。

免责声明: - 我不希望有大量图像,只会有 1 个图像,并且它会根据我按下的按钮而变化。

代码如下:

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()

所以我的问题是,如何使每个单独的按钮在按下时显示不同的图像?这个程序在这里只是留下一个空白区域来代替图像,并且图像未显示。

最佳答案

您发布的代码有两个主要问题。

第一个与本问题基本相同:Why does Tkinter image not show up if created in a function? 。您应该保留对 PhotoImage 对象的引用,否则它将被垃圾收集并且不会显示。

第二个是在每次单击按钮时创建一个新的Label。您应该只制作一个 Label 并使用 label.config() 方法更改图像。

我会(不将 GUI 包装在类中,这可能是一个更好的解决方案)在初始化时加载所有图像,将它们作为标签的属性保存在列表中,并且仅在单击按钮时更改图像。

我还删除了 make_funct 函数,并将其替换为 lambda,这是在回调时将变量传递给函数的最常用方法。

from tkinter import *

def funct(numimg):
label.config(image=label.images[numimg])

root= Tk()
row_no = -1
buttons = []
num_of_cols = 3
root.resizable(0, 0)
numfiles = 3

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 = lambda n=x: funct(n)))
buttons[x].grid(row = row_no, column = x % num_of_cols)

label = Label(root)
label.grid(row = row_no+1, column = 0, columnspan = num_of_cols)

label.images=[]

for x in range(0, numfiles):
label.images.append(PhotoImage(file="image"+str(x)+".png"))

root.mainloop()

关于python - 如何使用 tkinter (python) 让每个按钮在单击时显示不同的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51266887/

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