# -*- coding: utf-8 -*-
import tkinter as tk
import time as tm
from PIL import ImageTk
import math as mt
import tkinter.messagebox as tkmsg
hour_len = 50
minute_len = 75
sec_len = 100
root = tk.Tk()
root.title('PyTimer')
root.geometry('400x400')
root.attributes('-alpha',0.8)
root.configure(background='#002FA7')
root.minsize(400,400)
root.maxsize(400,400)
canvas = tk.Canvas(root,width=400,height=400,bg='#002FA7')
canvas.pack()
#bg = ImageTk.PhotoImage(file='sources\\bgglasses.jpg')
#canvas.create_image(0,0,image=bg)
canvas.create_oval(50,50,350,350)
def setTime():
global entry
entry = tk.Entry(root)
entry.place(x=200-75,y=300)
global button_to_set
button_to_set = tk.Button(root,text='设定',command=helpSetTime)
button_to_set.place(x=200-20,y=320)
def helpSetTime():
global count_down
count_down = entry.get()
entry.place_forget()
button_to_set.place_forget()
try:
count_down_int = int(count_down)
except ValueError:
tkmsg.showerror('错误','请检查您的输入')
del(count_down)
try:
label_count_down
except NameError:
pass
else:
canvas.delete(label_count_down)
del(label_count_down)
else:
global count_down_hour,count_down_minute,count_down_sec,set_time_sec,set_time_minute,set_time_hour
count_down_hour = count_down_int // 3600
count_down_minute = (count_down_int % 3600) // 60
count_down_sec = count_down_int - (count_down_hour*3600) - (count_down_minute*60)
set_time_sec = sec
set_time_minute = minute
set_time_hour = hour
def handler():
global run
run = False
root.protocol('WM_DELETE_WINDOW',handler)
run = True
button = tk.Button(root,text='设定倒计时',command=setTime)
button.place(x=0,y=0)
while run:
global label_count_down
try:
label_count_down
except NameError:
pass
global sec,minute,hour
sec = tm.localtime(tm.time()).tm_sec
minute = tm.localtime(tm.time()).tm_min
hour = tm.localtime(tm.time()).tm_hour
if sec < 10:
sec_text = '0'+str(sec)
else:
sec_text = str(sec)
if minute < 10:
minute_text = '0' + str(minute)
else:
minute_text = str(minute)
angle_sec = mt.pi*3/2-2*mt.pi*(sec/60)
angle_minute = mt.pi*3/2-2*mt.pi*(minute/60)
if minute >= 12:
angle_hour = mt.pi*3/2-2*mt.pi*(hour-12)/12
elif minute < 12:
angle_hour = mt.pi*3/2-2*mt.pi*hour/12
hour_text = str(hour)
hour_hand = canvas.create_line(200,200,200-hour_len*mt.cos(angle_hour),200+hour_len*mt.sin(angle_hour))
minute_hand = canvas.create_line(200,200,200-minute_len*mt.cos(angle_minute),200+minute_len*mt.sin(angle_minute))
sec_hand = canvas.create_line(200,200,200-sec_len*mt.cos(angle_sec),200+sec_len*mt.sin(angle_sec))
label = canvas.create_text(200,250,text=hour_text+':'+minute_text+':'+sec_text,font=('微软雅黑',15),activefill='#FFD058',disabledfill='#FFD058')
canvas.update()
global time_exist
try:
count_down
except NameError:
time_exist = False
try:
label_count_down
except NameError:
pass
else:
canvas.delete(label_count_down)
else:
time_exist = True
#canvas.delete(label_count_down)
target_hour = set_time_hour+count_down_hour
target_minute = set_time_minute+count_down_minute
target_sec = set_time_sec+count_down_sec
if target_sec >= 60:
target_sec -= 60
target_minute += 1
if target_minute >= 60:
target_minute -= 60
target_hour += 1
label_count_down = canvas.create_text(200,300,text=str(target_hour)+':'+str(target_minute)+':'+str(target_sec),font=('微软雅黑',13))
if (set_time_hour+count_down_hour == hour)&(set_time_minute+count_down_minute == minute)&(set_time_sec+count_down_sec == sec):
#canvas.delete(label_count_down) 在这里应该删除label_count_down,但是没删
tkmsg.showinfo('时间到了','时间到了')
del(count_down)
del(label_count_down)
canvas.delete(hour_hand,minute_hand,sec_hand,label)
print(time_exist)
del(sec,minute,hour,angle_sec,angle_minute,angle_hour,hour_hand,minute_hand,sec_hand,label,hour_text,minute_text,sec_text)
root.destroy()
问题就是:‘#canvas.delete(label_count_down) 在这里应该删除label_count_down,但是没删’ 这句,把注释改掉之后无法在canvas上删除label_count_down,怎么破?感谢各位!
import tkinter as tk
import time as tm
from PIL import ImageTk
import math as mt
import tkinter.messagebox as tkmsg
hour_len = 50
minute_len = 75
sec_len = 100
root = tk.Tk()
root.title('PyTimer')
root.geometry('400x400')
root.attributes('-alpha',0.8)
root.configure(background='#002FA7')
root.minsize(400,400)
root.maxsize(400,400)
canvas = tk.Canvas(root,width=400,height=400,bg='#002FA7')
canvas.pack()
#bg = ImageTk.PhotoImage(file='sources\\bgglasses.jpg')
#canvas.create_image(0,0,image=bg)
canvas.create_oval(50,50,350,350)
def setTime():
global entry
entry = tk.Entry(root)
entry.place(x=200-75,y=300)
global button_to_set
button_to_set = tk.Button(root,text='设定',command=helpSetTime)
button_to_set.place(x=200-20,y=320)
def helpSetTime():
global count_down
count_down = entry.get()
entry.place_forget()
button_to_set.place_forget()
try:
count_down_int = int(count_down)
except ValueError:
tkmsg.showerror('错误','请检查您的输入')
del(count_down)
try:
label_count_down
except NameError:
pass
else:
canvas.delete(label_count_down)
del(label_count_down)
else:
global count_down_hour,count_down_minute,count_down_sec,set_time_sec,set_time_minute,set_time_hour
count_down_hour = count_down_int // 3600
count_down_minute = (count_down_int % 3600) // 60
count_down_sec = count_down_int - (count_down_hour*3600) - (count_down_minute*60)
set_time_sec = sec
set_time_minute = minute
set_time_hour = hour
def handler():
global run
run = False
root.protocol('WM_DELETE_WINDOW',handler)
run = True
button = tk.Button(root,text='设定倒计时',command=setTime)
button.place(x=0,y=0)
while run:
global label_count_down
try:
label_count_down
except NameError:
pass
global sec,minute,hour
sec = tm.localtime(tm.time()).tm_sec
minute = tm.localtime(tm.time()).tm_min
hour = tm.localtime(tm.time()).tm_hour
if sec < 10:
sec_text = '0'+str(sec)
else:
sec_text = str(sec)
if minute < 10:
minute_text = '0' + str(minute)
else:
minute_text = str(minute)
angle_sec = mt.pi*3/2-2*mt.pi*(sec/60)
angle_minute = mt.pi*3/2-2*mt.pi*(minute/60)
if minute >= 12:
angle_hour = mt.pi*3/2-2*mt.pi*(hour-12)/12
elif minute < 12:
angle_hour = mt.pi*3/2-2*mt.pi*hour/12
hour_text = str(hour)
hour_hand = canvas.create_line(200,200,200-hour_len*mt.cos(angle_hour),200+hour_len*mt.sin(angle_hour))
minute_hand = canvas.create_line(200,200,200-minute_len*mt.cos(angle_minute),200+minute_len*mt.sin(angle_minute))
sec_hand = canvas.create_line(200,200,200-sec_len*mt.cos(angle_sec),200+sec_len*mt.sin(angle_sec))
label = canvas.create_text(200,250,text=hour_text+':'+minute_text+':'+sec_text,font=('微软雅黑',15),activefill='#FFD058',disabledfill='#FFD058')
canvas.update()
global time_exist
try:
count_down
except NameError:
time_exist = False
try:
label_count_down
except NameError:
pass
else:
canvas.delete(label_count_down)
else:
time_exist = True
#canvas.delete(label_count_down)
target_hour = set_time_hour+count_down_hour
target_minute = set_time_minute+count_down_minute
target_sec = set_time_sec+count_down_sec
if target_sec >= 60:
target_sec -= 60
target_minute += 1
if target_minute >= 60:
target_minute -= 60
target_hour += 1
label_count_down = canvas.create_text(200,300,text=str(target_hour)+':'+str(target_minute)+':'+str(target_sec),font=('微软雅黑',13))
if (set_time_hour+count_down_hour == hour)&(set_time_minute+count_down_minute == minute)&(set_time_sec+count_down_sec == sec):
#canvas.delete(label_count_down) 在这里应该删除label_count_down,但是没删
tkmsg.showinfo('时间到了','时间到了')
del(count_down)
del(label_count_down)
canvas.delete(hour_hand,minute_hand,sec_hand,label)
print(time_exist)
del(sec,minute,hour,angle_sec,angle_minute,angle_hour,hour_hand,minute_hand,sec_hand,label,hour_text,minute_text,sec_text)
root.destroy()
问题就是:‘#canvas.delete(label_count_down) 在这里应该删除label_count_down,但是没删’ 这句,把注释改掉之后无法在canvas上删除label_count_down,怎么破?感谢各位!