我正在尝试将图片按钮更改为图片标签。按下按钮应该更改按钮的图像以标记其他图像。之后,仍然可以按下其他图像按钮。
我有来自这里的代码:Python tkinter: Replacing an image button with an image label
from tkinter import *
class Game:
def __init__(self):
self.__window = Tk()
self.gifdir = "./"
self.igm = PhotoImage(file=self.gifdir+"empty.gif")
self.btn = Button(self.__window, image=self.igm, command = self.change_picture)
self.btn.grid(row=1, column=2, sticky=E)
self.btn2 = Button(self.__window, image=self.igm, command = self.change_picture)
self.btn2.grid(row=1, column=1, sticky=E)
self.__window.mainloop()
def change_picture(self):
self.igm = PhotoImage(file=self.gifdir+"new.gif")
self.btn.configure(image = self.igm)
def main():
Game()
main()
如果我按下另一个按钮,我就不能再按另一个按钮了,我想将按下的按钮更改为标签。
答案 0 :(得分:3)
我修改了代码以对按钮和图像使用多个引用:
from tkinter import *
class Game:
def __init__(self):
self.__window = Tk()
self.gifdir = "./"
self.imgs = [PhotoImage(file=self.gifdir+"empty.gif"),
PhotoImage(file=self.gifdir+"empty.gif")]
self.btns = []
btn1 = Button(self.__window, image=self.imgs[0],
command = lambda: self.change_picture(0))
btn1.grid(row=1, column=2, sticky=E)
self.btns.append(btn1)
btn2 = Button(self.__window, image=self.imgs[1],
command = lambda: self.change_picture(1))
btn2.grid(row=1, column=1, sticky=E)
self.btns.append(btn2)
self.__window.mainloop()
def change_picture(self, btn_no):
self.imgs[btn_no] = PhotoImage(file=self.gifdir+"new.gif")
self.btns[btn_no].configure(image = self.imgs[btn_no])
def main():
Game()
main()
对按钮和图像的引用存储在列表中。 change_picture更改为将按钮编号作为参数,以便您可以区分按下哪个按钮。
通过这些更改,可以单独按下每个按钮,以便在按下时更改图像。