当我更改 PNG 文件时,Tkinter 性能会下降,但我不知道为什么

问题描述

我一直在为一个项目学习一些基本的 python gui 东西,我为 RPM 表盘创建了一个动画,当我使用从 Photoshop 导出的第一个 PNG 时,它工作正常。但是,当我在 PS 中向表盘添加更多功能,然后使用以相同设置导出的 PNG 时,性能会明显下降。文件大小在纸上相同,但在现实中显然不同,我想知道代码或导出中是否有解决方法

python 脚本

import tkinter as tk
from tkinter.constants import CENTER
from PIL import ImageTk,Image  

# --- Main application set up ---
main_app = tk.Tk()
main_app.title('DT1')
width_value=main_app.winfo_screenwidth()
height_value=main_app.winfo_screenheight()

#width_value=1400
#height_value=1000
#main_app.geometry("%dx%d+0.5+0.5" % (width_value,height_value))
main_app.geometry("%dx%d" % (width_value,height_value))

# Frame setup
frame = tk.Frame(main_app,bg='black')
frame.place(relwidth=1,relheight=1)

# DES logo
DES_logo=tk.Label(frame,text='DT1',font='ariel 18 bold',bg='#000000',fg='#626262')
DES_logo.place(relx=0.01,rely=0.91,relwidth=0.20,relheight=0.05)

#Canvas
my_canvas2 = tk.Canvas(frame,width = 800,height = 120,background = 'black',highlightthickness=0)
my_canvas2.place(x=10,y=10)

img = ImageTk.PhotoImage(Image.open(r'C:/Users/Sandip Dhillon/Desktop/stuff/dev_tests/img/dialtest3.png'))

my_canvas3 = tk.Canvas(frame,width = 1920,height = 1080,highlightthickness=0)
my_canvas3.place(x=1,y=1)


my_canvas3.create_image(960,540,anchor=CENTER,image=img,tags="image")

        
class Dial():
    count = 200
    upper_limit = 359

    @staticmethod
    def add_Dialcount():
        if Dial.count < Dial.upper_limit :
            Dial.count -= 3
            print(Dial.count)
            CanvasCreate.canvas_Handling()
        else:
            Dial.count = 200
            print(Dial.count)
            CanvasCreate.canvas_Handling()

class CanvasCreate():
        @staticmethod
        def canvas_Handling():
                # Clear Canvas
                my_canvas3.delete("dial")
        # Create RPM Line/bar
                my_canvas3.create_arc(580,160,1340,930,extent=Dial.count,fill='#a15800',tags="dial") 
                my_canvas3.tag_raise("image")
        # Call for the loop to start again
                main_app.after(10,Dial.add_Dialcount)


Dial.add_Dialcount()

main_app.mainloop()

当我使用这个 png 时,它工作得很好

PNG1

然而,当我使用这个时,它明显变慢了

PNG2

以及文件大小的屏幕截图,第一个 PNG 实际上是一个较小的文件

File Sizes PNG2 & PN1

我想也许一种解决方法是使用透明画布,然后将 PNG 放在它上面,这样我就不必每次循环都将其抬起,但我认为您无法使画布透明。

PS 拨号计数器逻辑坏了,但这是一个快速而肮脏的测试,不会影响这个错误,会修复!

谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)