嗨我正在尝试制作一个代码,当按下按钮时,该代码会用图像标签替换图像按钮。但窗口没有更新,因此新图像不可见。有谁能够帮我?如果甚至可以这样做。
我正在尝试的代码:
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)
新图片会显示一秒钟,但我需要一直看到它,但仍然可以按其他按钮。
答案 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
的范围时,垃圾收集器将删除图像。