模拟时钟项目上的笨拙/缓慢拖动功能。((Python)]] << [

问题描述 投票:1回答:1
我刚刚完成了我的第一个Python项目,一个模拟时钟。我设法达到一种状态,在此状态下,我实现了所想的一切,并修复了随后出现的问题。我添加的最后一件事是时钟的拖动功能,虽然它可以正常工作,但它似乎很慢或至少不平滑。目前,我缺乏知识和经验,无法理解为什么会发生这种情况,更不用说修复它了。任何帮助或想法都将不胜感激,谢谢。 :)

相关代码:

#Imported tkinter for its methods import tkinter as tk #Imported turtle for drawing the clock's hands import turtle #Imported time to handle setting and updating the time import time #Declared and set the color used for transparency transparent_clr='#FB00FF' #Setup a borderless window with transparent background #and always on top flag root=tk.Tk() root.overrideredirect(True) root.wm_attributes('-topmost', 1) root.deiconify() root.attributes('-transparentcolor', transparent_clr) #Setup the clock's face using an image Clock_bg=tk.PhotoImage(file='Clock_bg.png') canvas=tk.Canvas(width=300, height=300, highlightthickness=0) screen=turtle.TurtleScreen(canvas) canvas.create_image(0,0, image=Clock_bg) canvas.pack() screen.tracer(0) screen.bgcolor(transparent_clr) #Configure the pen used for the clock's hands draw=turtle.RawTurtle(screen) draw.hideturtle() draw.speed(0) draw.pensize(3) #Retain Windows TaskBar visibility and function such as exiting #the app wn=tk.Toplevel(root) wn.iconify() wn.iconbitmap('Clock_icon.ico') wn.attributes('-alpha', 0.0) def wn_destroy(): wn.protocol('WM_DELETE_WINDOW', exit_func) def exit_func(): root.destroy() wn_destroy() #Make the clock draggable def draggable(): root._offsetx=0 root._offsety=0 root.bind('<Button-1>', winclick) root.bind('<B1-Motion>', windrag) def windrag(event): x=root.winfo_pointerx() - root._offsetx y=root.winfo_pointery() - root._offsety root.geometry('+{x}+{y}'.format(x=x,y=y)) def winclick(event): root._offsetx=event.x root._offsety=event.y draggable() #Draw the clock and its hands def draw_clock(h,m,s,draw): #Draw the hours hand draw.penup() draw.goto(0,0) draw.color('black') draw.setheading(90) angle=(h/12)*360+(m/60)*30 draw.rt(angle) draw.pendown() draw.fd(70) # Draw the minutes hand draw.penup() draw.goto(0, 0) draw.color('black') draw.setheading(90) angle=(m/60)*360+(s/60)*6 draw.rt(angle) draw.pendown() draw.fd(100) # Draw the seconds hand draw.penup() draw.goto(0, 0) draw.color('red') draw.setheading(90) angle = (s/60)*360 draw.rt(angle) draw.pendown() draw.fd(60) #Update the time in real time while True: # Declared and set the hour, minutes and seconds h = int(time.strftime('%I')) m = int(time.strftime('%M')) s = int(time.strftime('%S')) draw_clock(h, m, s, draw) screen.update() time.sleep(1) draw.clear()

我刚刚完成了我的第一个Python项目,一个模拟时钟。我设法达到一种状态,在此状态下,我实现了所想的一切,并修复了随后出现的问题。我添加的最后一件事是...
python python-3.x tkinter draggable turtle-graphics
1个回答
0
投票
“”您将自己的mainloop与time.sleep(1)一起使用,因此root.geometry(仅每秒被调用一次。–stovfl“
© www.soinside.com 2019 - 2024. All rights reserved.