微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决当我更改 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 举报,一经查实,本站将立刻删除。