tkinter gif问题:黑色变为白色,以前的框架不会消失

发布于 2025-01-22 08:40:12 字数 2135 浏览 3 评论 0原文

我正在尝试在Python编码桌面宠物。为此,我主要使用了TKINTER。我设法创建了一个带有两个GIF的窗口,这些窗口彼此跟随,但是我对框架的显示有问题。正如您在图片中看到的那样,黑色变为白色,有时它完全消失了……此外,对于其中一个GIF,两个帧同时出现,一个以前的 一个停留而不是消失。  

这是我的代码:

import random
import tkinter as tk
import pyautogui

impath = '.\\Assets\\'

x = 1400
cycle = 0
check = 0

probality=10
idle_num = list(range(0,7))
cry_num = list(range(7,11))
event_number = random.randrange(probality)

#transfer random no. to event
def event(cycle, check, event_number, x):
    if event_number in idle_num:
        check = 0
        print('idle')
        window.after(500, update, cycle, check, event_number, x)

    elif event_number in cry_num:
        check = 1
        window.after(500, update, cycle, check, event_number, x)

# make the gif work
def gif_work(cycle, frames, event_number):
    if cycle < len(frames) -1:
        cycle += 1
    else:
        cycle = 0
        event_number = random.randrange(probality)

    return cycle, event_number

def update(cycle, check, event_number, x):
    # idle
    if check == 0:
        frame = idle[cycle]
        cycle, event_number = gif_work(cycle, idle, event_number)

    # cry
    elif check == 1:
        frame = cry[cycle]
        cycle, event_number = gif_work(cycle, cry, event_number)
    
    window.geometry('842x842+' + str(x // 2) + '+50')
    #window.geometry('100x100+' + str(x // 2) + '+930')
    label.configure(image=frame)


    window.after(1, event, cycle, check, event_number, x)


window = tk.Tk()

# call buddy's action .gif to an array
idle = [tk.PhotoImage(file=impath + 'existerGif.gif', format='gif -index %i' % (i)) for i in range(3)]  # idle gif , 4 frames
cry = [tk.PhotoImage(file=impath + 'placeGif.gif'   , format='gif -index %i' % (i)) for i in range(8)]  # sleep gif, 8 frames


window.config(highlightbackground='white')
label = tk.Label(window)
window.overrideredirect(True)
window.wm_attributes('-transparentcolor','blue')

label.pack()

#loop the program

window.after(1,update,cycle,check,event_number,x)

window.mainloop()

也许这是一个格式问题,我在Photoshop上使用PNG图像进行了gif。

无论如何,如果有人有一个主意,我会很高兴听到它^^ 祝你今天过得愉快!

I'm trying to code a desktop pet in python. For that I mainly used tkinter. I managed to create a window with two gifs which follow one another, but I have an issue with the display of the frames. As you can see in the picture, the black colour became white and sometimes it completely disappeared... In addition, for one of the gifs, two frames appear at the same time, the previous one staying instead of disappearing. 

This is my code :

import random
import tkinter as tk
import pyautogui

impath = '.\\Assets\\'

x = 1400
cycle = 0
check = 0

probality=10
idle_num = list(range(0,7))
cry_num = list(range(7,11))
event_number = random.randrange(probality)

#transfer random no. to event
def event(cycle, check, event_number, x):
    if event_number in idle_num:
        check = 0
        print('idle')
        window.after(500, update, cycle, check, event_number, x)

    elif event_number in cry_num:
        check = 1
        window.after(500, update, cycle, check, event_number, x)

# make the gif work
def gif_work(cycle, frames, event_number):
    if cycle < len(frames) -1:
        cycle += 1
    else:
        cycle = 0
        event_number = random.randrange(probality)

    return cycle, event_number

def update(cycle, check, event_number, x):
    # idle
    if check == 0:
        frame = idle[cycle]
        cycle, event_number = gif_work(cycle, idle, event_number)

    # cry
    elif check == 1:
        frame = cry[cycle]
        cycle, event_number = gif_work(cycle, cry, event_number)
    
    window.geometry('842x842+' + str(x // 2) + '+50')
    #window.geometry('100x100+' + str(x // 2) + '+930')
    label.configure(image=frame)


    window.after(1, event, cycle, check, event_number, x)


window = tk.Tk()

# call buddy's action .gif to an array
idle = [tk.PhotoImage(file=impath + 'existerGif.gif', format='gif -index %i' % (i)) for i in range(3)]  # idle gif , 4 frames
cry = [tk.PhotoImage(file=impath + 'placeGif.gif'   , format='gif -index %i' % (i)) for i in range(8)]  # sleep gif, 8 frames


window.config(highlightbackground='white')
label = tk.Label(window)
window.overrideredirect(True)
window.wm_attributes('-transparentcolor','blue')

label.pack()

#loop the program

window.after(1,update,cycle,check,event_number,x)

window.mainloop()

Maybe it's a format problem, I did my gifs on photoshop with png images.

Anyway if someone has an idea I'll be glad to hear it ^^
Have a nice day!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文