本品制作的是一个仿手表式的软件!
模拟时钟在程序界,也就相当于入门级的难度。现在非编程专业人士遇到的很多python培训机构良莠不齐,五花八门。想要收获学习的人可能无形之间就上了他们的当!
就好比一个小侠客,招式各门各派都有,各种武功眼花缭乱,但内力深厚的人自然有掩盖不了的实力。
python使用的人越来越多,使用时能导入各种各样的包,导致之后的显示窗口也是不尽相同,但无论你怎么学,若一个显示时钟都做不了,那就证明你的功力没怎么入门!
为了实现上述功能,我将每一步的要求都记录下来,逐一实现,最好融合到达既定的要求!
1、炫酷外表小程序:幅度角+1,随机颜色,轮回旋转.。
2、内置小程序:单体幕布,画出数字,设置时间,绘制时针、分针、秒针。
3、时间小程序:显示“中国标准时间”,日期及星期几。
4、切换模式:按下enter键后,立即跳转时间显示界面。
import sys,random,math,pygame,datetime
from datetime import *
import time
from pygame.locals import*
class shizhong (object):
def __init__(self):
self.pos_x=300
self.pos_y=230
self.radius=200
self.angle=0
self.color=0,0,255
self.failed=False
self.flag=False
self.start=0
self.seconds=10
self.vel_y=0.7
self.date_y=450
def look(self):
self.angle+=1
if self.angle>=360:
self.angle=0
r=random.randint(0,255)
g=random.randint(0,255)
b=random.randint(0,255)
self.color=r,g,b#七彩颜色
x=math.cos(math.radians(self.angle))*self.radius
y=math.sin(math.radians(self.angle))*self.radius
r=10
pos=(int(self.pos_x+x),int(self.pos_y+y))#轮回旋转
pygame.draw.circle(screen,self.color,pos,r,0)
def inside(self):
r2=190
pos2=(self.pos_x,self.pos_y)
pygame.draw.circle(screen,black,pos2,r2,0)#刷新幕布
#pygame.draw.circle(screen,black,pos2,300,90)
for n in range(1,13):#画出数字
angle1=math.radians(n*(360/12)-90)
x=self.pos_x+math.cos(angle1)*(self.radius-20)-10
y=self.pos_y+math.sin(angle1)*(self.radius-20)-10
print_t(font,x,y,str(n),white)
today=datetime.today()
hours=today.hour%12#设置时间值
hour_s=wrap_a(hours*(360/12)-90)#12点为起始 ,hour
hour_s=math.radians(hour_s)
hour_x=math.cos(hour_s)*(self.radius-80)
hour_y=math.sin(hour_s)*(self.radius-80)
target=(self.pos_x+hour_x,self.pos_y+hour_y)
pygame.draw.line(screen,grey,(self.pos_x,self.pos_y),target,25)
minute=today.minute
min_s=wrap_a(minute*(360/60)-90)#设置分钟值,minute
min_s=math.radians(min_s)
min_x=math.cos(min_s)*(self.radius-60)
min_y=math.sin(min_s)*(self.radius-60)
target=(self.pos_x+min_x,self.pos_y+min_y)
pygame.draw.line(screen,grey,(self.pos_x,self.pos_y),target,12)
seconds=today.second
sec_a=wrap_a(seconds*(360/60)-90)#设置秒值,seconds
sec_a=math.radians(sec_a)
sec_x=math.cos(sec_a)*(self.radius-40)
sec_y=math.sin(sec_a)*(self.radius-40)
target=(self.pos_x+sec_x,self.pos_y+sec_y)
pygame.draw.line(screen,red,(self.pos_x,self.pos_y),target,6)
r1=20
pos1=(self.pos_x,self.pos_y)
pygame.draw.circle(screen,white1,pos1,r1,0)
def time(self):
screen.fill(black)
today=datetime.today()
h1=today.hour
m1=today.minute
s1=today.second
current=time.clock()-self.start
if self.seconds-current<0:
self.failed=False
elif current<=self.seconds:
#解决“yy”格式问题,此处应该有掌声!
text=geshi[h1]+":"+geshi[m1]+":"+geshi[s1]
print_t(font1,160,100,text,self.color)
#print_t(font,0,80,"time:"+str(int(current)))
def date(self):
today=time.localtime()
y2=today.tm_year
m2=today.tm_mon
d2=today.tm_mday
w2=time.strftime("%w",today)
date_x=220
text2=str(m2)+"月"+str(d2)+"日星期"+xingqi[int(w2)]
#print_t(font_h1,0,0,"星期:"+str(w2))
print_t(font_h1,date_x+10,self.date_y+35,text2,grey)
print_t(font_h2,date_x,self.date_y,"中国标准时间",white1)
if self.failed:
if self.date_y>200:
self.date_y-=self.vel_y
else:
self.date_y=450
pygame.init()
screen=pygame.display.set_mode((600,500))
pygame.display.set_caption("能不能支持汉字")
font=pygame.font.Font(None,24)
font1=pygame.font.Font(None,100)
font_h1=pygame.font.SysFont('SimHei',20)
font_h2=pygame.font.SysFont('SimHei',24)
geshi=['00','01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '60']
xingqi=("日","一","二","三","四","五","六")
# rgb
black=0,0,0
blue=0,0,100
white=255,255,255
white1=200,200,200
grey=100,100,100
red=255,0,0
a=shizhong()
screen.fill(black)
while True:
for event in pygame.event.get():
if event.type==QUIT:
sys.exit()
elif event.type==KEYDOWN:
if event.key==K_RETURN:
#a.flag=not a.flag
a.failed=not a.failed
a.start=time.clock()
# 此处调整了一个bug,巡查按键超级灵活
keys=pygame.key.get_pressed()
if keys[K_ESCAPE]:
sys.exit()
if a.failed:
a.time()
a.date()
else:
a.look()
a.inside()
a.date()
pygame.display.update()
我学习python显示窗口写的第一个程序便是时钟,疫情特殊时期入的门,之后删删改改十几天才完成。
现在回头在看,觉得自己以前的程序还是有所欠缺,换作是你,也肯定不会满意。
写代码最重要的,是要描述如何实现自己想要的功能,虽然现在看自己以前水平不咋地,但跌跌撞撞还是实现了内心的想法,整个过程中收获最多的便是这自我肯定的喜悦!