python - 当我更改 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 它完美地工作
但是,当我使用这个时,它明显变慢了
还有文件大小的屏幕截图,第一个PNG实际上是一个较小的文件
我想也许一种解决方法是拥有一个透明的画布,然后将 PNG 放在上面,这样我就不必在每个循环中都提升它,但我认为你不能让画布透明。
PS拨号计数器逻辑坏了,但这是一个快速而肮脏的测试,不会影响这个错误,将修复!
谢谢
解决方案
推荐阅读
- java - Kafka - 反序列化消费者中的对象
- python - 从 shell 脚本执行 .py 脚本,为什么 $1 是神奇的解决方案?
- magento-1.9 - 如何在 magento 1.9 的产品创建页面中创建新选项卡
- c# - 实体框架:如何从相关表中获取数据(多对多)
- php - 在 Laravel 中上传某些文件类型的问题
- node.js - 节点 js 日志记录 - winston.Logger 不是构造函数
- python - Numpy fft没有给出预期的结果
- r - Shiny 中 fillPage 的基本示例 - 它是如何工作的?
- google-iap - 负载均衡器前的 IAP 指向存储桶
- c# - ToList() 不适用于动态生成的 where 子句 Asp.Net Core