Python tkinter:按下按钮,用图像标签替换图像按钮

时间:2014-12-17 02:20:47

标签: python tkinter

我正在尝试将图片按钮更改为图片标签。按下按钮应该更改按钮的图像以标记其他图像。之后,仍然可以按下其他图像按钮。

我有来自这里的代码: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()

如果我按下另一个按钮,我就不能再按另一个按钮了,我想将按下的按钮更改为标签。

1 个答案:

答案 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更改为将按钮编号作为参数,以便您可以区分按下哪个按钮。

通过这些更改,可以单独按下每个按钮,以便在按下时更改图像。