问题描述
我一直在为一个项目学习一些基本的 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 时,它工作得很好
然而,当我使用这个时,它明显变慢了
以及文件大小的屏幕截图,第一个 PNG 实际上是一个较小的文件
我想也许一种解决方法是使用透明画布,然后将 PNG 放在它上面,这样我就不必每次循环都将其抬起,但我认为您无法使画布透明。
PS 拨号计数器逻辑坏了,但这是一个快速而肮脏的测试,不会影响这个错误,会修复!
谢谢
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)