#################################### ## pip install Image ## pip install Pyinstaller ## Pyinstaller -F -w index.py #################################### import tkinter as tk import time from tkinter import * import tkinter from PIL import Image, ImageTk, ImageSequence import sys import os # import datetime class DragWindow: def __init__(self): self.root = tkinter.Tk() self.root.title("优化") self.x, self.y = 0, 0 self.window_size = '300x270' # 设置隐藏窗口标题栏和任务栏图标 self.root.overrideredirect(False) # self.root.protocol('WM_DELETE_WINDOW', self.root.iconify) # 窗口透明度60% # self.root.attributes("-alpha", 0.4) # # 设置窗口大小、位置 长x宽+x+y self.root.geometry(f"{self.window_size}+10+20") # # 设定背景颜色 # self.root.configure(bg="blue") self.canvas = Canvas(self.root,width=200, height=200,bg='white') self.canvas.pack() # 窗口移动事件 self.root.bind("", self.move) # # 单击事件 # self.root.bind("", self.get_point) # # 右击事件 self.root.bind("", self.close) #分解gif并逐帧显示 def pick(self, filepath, name): displayText = "正在优化"+name+"线形" label = tk.Label(self.root, text=displayText, font=("华文楷体", 20), fg="green") label.pack() label1 = tk.Label(self.root, text="0%", font=("华文行楷", 20), fg="green") label1.pack() global a,flag # while 1: try: for i in range(21): im = Image.open(filepath + '\\loading.gif') # GIF图片流的迭代器 iter = ImageSequence.Iterator(im) #frame就是gif的每一帧,转换一下格式就能显示了 # starttime = datetime.datetime.now() for frame in iter: pic=ImageTk.PhotoImage(frame) self.canvas.create_image((100,100), image=pic) time.sleep(0.02) self.root.update_idletasks() #刷新 self.root.update() # endtime = datetime.datetime.now() # print ((endtime - starttime).microseconds) if i < 2: label1['text'] = str((i+1) * 5) + "%" elif i < 9: label1['text'] = str(2 * 5) + "%" elif i < 13: label1['text'] = str(10 * 5) + "%" else: label1['text'] = str((i+1) * 5) + "%" except Exception as e: print("错误信息:",e) def move(self, event): """窗口移动事件""" new_x = (event.x - self.x) + self.root.winfo_x() new_y = (event.y - self.y) + self.root.winfo_y() s = f"{self.window_size}+{new_x}+{new_y}" self.root.geometry(s) def get_point(self, event): """获取当前窗口位置并保存""" self.x, self.y = event.x, event.y def run(self): self.root.mainloop() def close(self): self.root.destroy() if __name__ == "__main__": if len(sys.argv) < 3: filepath = os.path.dirname(os.path.abspath(__file__)) name = "" else: filepath = sys.argv[1] name = sys.argv[2] window = DragWindow() window.pick(filepath, name) # window.run()