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

时间:2014-12-17 00:45:40

标签: python tkinter

嗨我正在尝试制作一个代码,当按下按钮时,该代码会用图像标签替换图像按钮。但窗口没有更新,因此新图像不可见。有谁能够帮我?如果甚至可以这样做。

我正在尝试的代码:

from tkinter import *
import time

gifdir = "./"
class Game:
   def __init__(self):
      self.__window = Tk()



      igm = PhotoImage(file=gifdir+"empty.gif")

      Button(self.__window, image=igm, command= self.change_picture)\
      .grid(row=1, column=2, sticky=E)

      def change_picture():
        igm = PhotoImage(file=gifdir+"new.gif")
        Label(self.__window, image=igm,)\
        .grid(row=1, column=2, sticky=E)

       self.__window.mainloop()

def main():
    Game()


main()

当我将此代码添加到结尾时:

   self.__window.update_idletasks()
   time.sleep(1)

新图片会显示一秒钟,但我需要一直看到它,但仍然可以按其他按钮。

1 个答案:

答案 0 :(得分:2)

我修改了你的代码,因为你的代码设计非常奇怪,而且IMO不正确。这是修改后的版本:

from tkinter import *

import time

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.__window.mainloop()                

    def change_picture(self):
        self.igm = PhotoImage(file=self.gifdir+"new.gif")
        self.btn.configure(image = self.igm)              


def main():
    Game()


main()

在这个新版本中,按下按钮将更改其上的图像。基本上,在您的类中,您需要保持对创建的小部件的引用。特别是保留PhotoImage的引用很重要,好像没有保留引用一样,当PhotoImage的实例超出change_picture的范围时,垃圾收集器将删除图像。