首页 > 解决方案 > 当我更改 PNG 文件时,Tkinter 性能会下降,但我不知道为什么

问题描述

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

蟒蛇脚本

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, background = 'black', 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实际上是一个较小的文件

文件大小 PNG2 和 PN1

我想也许一种解决方法是拥有一个透明的画布,然后将 PNG 放在上面,这样我就不必在每个循环中都提升它,但我认为你不能让画布透明。

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

谢谢

标签: pythontkinterphotoshoptkinter-canvas

解决方案


推荐阅读