Tkinter中DVD弹跳Logo图像无法切换问题求助
Tkinter DVD弹跳Logo无法切换图像问题
问题概述
程序无报错,Logo可正常弹跳,但无法切换4张不同颜色的图像。已尝试删除旧图像重建、使用canvas.itemconfig()更新图像、刷新界面等方法,均无效。
完整代码
import random from tkinter import * from PIL import ImageTk, Image root = Tk() root.title("DVD Logo") root.resizable(False, False) root.attributes("-fullscreen", True) width = root.winfo_screenwidth() height = root.winfo_screenheight() dvd_vermelho = Image.open("dvd_vermelho.png").resize((256, 256)) dvd_verde = Image.open("dvd_verde.png").resize((256, 256)) dvd_azul = Image.open("dvd_azul.png").resize((256, 256)) dvd_amarelo = Image.open("dvd_amarelo.png").resize((256, 256)) x,y = dvd_vermelho.size canvas_x = width canvas_y = height canvas = Canvas(root, width=canvas_x, height=canvas_y, bg="blue") canvas.pack() root.update() canvas_widht = canvas.winfo_width() canvas_height = canvas.winfo_height() dvd_vermelho_tk = ImageTk.PhotoImage(dvd_vermelho, master=canvas) dvd_verde_tk = ImageTk.PhotoImage(dvd_verde, master=canvas) dvd_amarelo_tk = ImageTk.PhotoImage(dvd_amarelo, master=canvas) dvd_azul_tk = ImageTk.PhotoImage(dvd_azul, master=canvas) dvd_logos = [dvd_amarelo_tk, dvd_verde_tk, dvd_vermelho_tk, dvd_azul_tk] containerDVD = canvas.create_image(0, 0, anchor=NW, image=dvd_logos[0]) valuex = 2 valuey = 3 random_x = random.randint(0, canvas_widht - x) random_y = random.randint(0, canvas_height - y) canvas.move(containerDVD, random_x, random_y) initial_trajectory_x = random.choice([-valuex, valuex]) initial_trajectory_y = random.choice([-valuey, valuey]) current_posx = random_x current_posy = random_y def changeImage(): global dvd_azul_tk, dvd_verde_tk, dvd_vermelho_tk, dvd_amarelo_tk, containerDVD last_exit = dvd_logos.pop(0) dvd_logos.append(last_exit) canvas.delete(containerDVD) containerDVD = canvas.create_image(current_posx, current_posy, anchor=NW, image=dvd_logos[0]) def moveDVD(): global current_posx, current_posy, initial_trajectory_x, initial_trajectory_y, dvd canvas.move(containerDVD, initial_trajectory_x, initial_trajectory_y) current_posx += initial_trajectory_x current_posy += initial_trajectory_y if current_posx <= 0 or current_posx+x >= canvas_widht: initial_trajectory_x *= -1 changeImage() if current_posy <= 0 or current_posy+y >= canvas_height: initial_trajectory_y *= -1 changeImage() root.after(12, moveDVD) root.after(12, moveDVD) root.mainloop()
核心问题代码
def changeImage(): global dvd_azul_tk, dvd_verde_tk, dvd_vermelho_tk, dvd_amarelo_tk, containerDVD last_exit = dvd_logos.pop(0) dvd_logos.append(last_exit) canvas.delete(containerDVD) containerDVD = canvas.create_image(current_posx, current_posy, anchor=NW, image=dvd_logos[0])
疑问
已尝试多种图像更新方式均无效,请问是图像引用问题还是after循环的问题?遗漏了哪些步骤?
内容的提问来源于stack exchange,提问作者Gustavo Godoy
相关产品推荐
相关产品推荐

