首页 > 解决方案 > 伙计们,我在尝试完成这项工作时遇到了很多麻烦,itemconfig 无法正常工作

问题描述

import random
from tkinter import *
import time
class game:
    def __init__(self,widthh,heighht):

        self.tk=Tk()
        self.canvas=Canvas(self.tk, width=widthh, height=heighht )
        self.canvas.pack()
        self.background=PhotoImage(file="C:/Users/ryantan/Desktop/python/run for your life/player sprite/player1.gif")
        self.over=self.canvas.create_image(200,200,image = self.background, anchor = 'center')
        self.tk.update()

    def mainloop(self):
        while True:
            self.tk.update()
g=game(1000,400)
g.canvas.itemconfig(g.over,image = PhotoImage(file="C:/Users/ryantan/Desktop/python/run for your life/player sprite/player2.gif"))
g.mainloop()

标签: python-3.xtkinter

解决方案


您的代码不起作用,因为您没有保留对在itemconfig. 垃圾收集器需要知道你想要保留这个对象。您可以在此处查看文档。

我已经删除了您的更新循环,因为这不是必需的。Tk.mainloop()会为你处理的。

from tkinter import *


class Game:

    def __init__(self, width, height):
        self.tk = Tk()
        self.canvas = Canvas(self.tk, width=width, height=height)
        self.canvas.pack()
        self.background = PhotoImage(
            file="C:/Users/ryantan/Desktop/python/run for your life/player sprite/player1.gif"
        )
        self.over = self.canvas.create_image(
            200, 200, image=self.background, anchor='center'
        )

    def mainloop(self):
        self.tk.mainloop()


if __name__ == '__main__':
    g = Game(1000, 400)
    new_image = PhotoImage(file="C:/Users/ryantan/Desktop/python/run for your life/player sprite/player2.gif")
    g.canvas.itemconfig(
        g.over,
        image=new_image
    )
    g.mainloop()

推荐阅读