python项目神奇时钟代码_Python实现模拟时钟代码推荐

Python实现模拟时钟代码推荐

# coding=utf8

import sys, pygame, math, random

from pygame.locals import *

from datetime import datetime, date, time

def print_text(font, x, y, text, color=(255,255,255)):

imgtext = font.render(text, True, color)

screen.blit(imgtext, (x,y))

def wrap_angle(angle):

return abs(angle%360)

# main

pygame.init()

screen = pygame.display.set_mode((600,500))

pygame.display.set_caption("CLOCK")

font = pygame.font.Font(None, 36)

orange = 220,180,0

white = 255,255,255

yellow = 255,255,0

pink = 255,100,100

pos_x = 300

pos_y = 250

radius = 250

angle = 360

# repeating loop

while True:

for event in pygame.event.get():

if event.type == QUIT:

sys.exit()

keys = pygame.key.get_pressed()

if keys[K_ESCAPE]:

sys.exit()

screen.fill((0,0,100))

# draw circle

pygame.draw.circle(screen, white, (pos_x,pos_y), radius, 6)

# draw the clock number 1-12

for n in range(1,13):

angle = math.radians(n*(360/12)-90)

x = math.cos(angle)*(radius-20)-10

y = math.sin(angle)*(radius-20)-10

print_text(font, pos_x+x, pos_y+y, str(n))

# get the time of day

today = datetime.today()

hours = today.hour%12

minutes = today.minute

seconds = today.second

# draw the hours hand

hour_angle = wrap_angle(hours*(360/12)-90)

hour_angle = math.radians(hour_angle)

hour_x = math.cos(hour_angle)*(radius-80)

hour_y = math.sin(hour_angle)*(radius-80)

target = (pos_x+hour_x, pos_y+hour_y)

pygame.draw.line(screen, pink, (pos_x,pos_y), target, 12)

# draw the minutes hand

min_angle = wrap_angle(minutes*(360/60)-90)

min_angle = math.radians(min_angle)

min_x = math.cos(min_angle)*(radius-60)

min_y = math.sin(min_angle)*(radius-60)

target = (pos_x+min_x, pos_y+min_y)

pygame.draw.line(screen, orange, (pos_x,pos_y), target, 12)

# draw the seconds hand

sec_angle = wrap_angle(seconds*(360/60)-90)

sec_angle = math.radians(sec_angle)

sec_x = math.cos(sec_angle)*(radius-40)

sec_y = math.sin(sec_angle)*(radius-40)

target = (pos_x+sec_x, pos_y+sec_y)

pygame.draw.line(screen, yellow, (pos_x,pos_y), target, 12)

# draw the center

pygame.draw.circle(screen, white, (pos_x,pos_y), 20)

print_text(font, 0, 0, str(hours) + ":" + str(minutes) + ":" + str(seconds))

pygame.display.update()

再来一个例子

import sys

from PyQt4 import QtGui, QtCore

from PyQt4.QtCore import Qt

from PyQt4.QtCore import QPoint

from PyQt4.QtCore import QTimer

from PyQt4.QtCore import QTime

from PyQt4.QtGui import QPainter

from PyQt4.QtGui import QColor

from PyQt4.QtGui import QPolygon

from PyQt4.QtCore import SIGNAL as signal

class Clock(QtGui.QWidget):

'''

classdocs

'''

def __init__(self):

'''

Constructor

'''

super(Clock, self).__init__()

self.hourColor=QColor(127, 0, 127);

self.minuteColor=QColor(0, 127, 127, 191)

self.secondColor=QColor(127, 127,0,120)

self.initUI()

self.timer = QTimer()

self.timer.timeout.connect(self.update)

self.timer.start(30)

self.show()

def handChange(self):

self.side = min(self.width(), self.height())

self.hand=(max(self.side/200,4), max(self.side/100,8), max(self.side/40,30))

self.hourHand=QPolygon([QPoint(self.hand[0],self.hand[1]),QPoint(-self.hand[0],self.hand[1]),QPoint(0,-self.hand[2])])

self.minuteHand=QPolygon([QPoint(self.hand[0],self.hand[1]),QPoint(-self.hand[0],self.hand[1]),QPoint(0,-self.hand[2]*2)])

self.secondHand=QPolygon([QPoint(self.hand[0],self.hand[1]),QPoint(-self.hand[0],self.hand[1]),QPoint(0,-self.hand[2]*3)])

def set_transparency(self, enabled):

if enabled:

self.setAutoFillBackground(False)

else:

self.setAttribute(Qt.WA_NoSystemBackground, False)

#下面这种方式好像不行

# pal=QtGui.QPalette()

# pal.setColor(QtGui.QPalette.Background, QColor(127, 127,10,120))

# self.setPalette(pal)

self.setAttribute(Qt.WA_TranslucentBackground, enabled)

self.repaint()

def initUI(self):

self.setGeometry(300, 300, 300, 200)

self.setWindowTitle('Clock')

self.handChange()

self.rightButton=False

# 下面两个配合实现窗体透明和置顶

sizeGrip=QtGui.QSizeGrip(self)

self.setWindowFlags(Qt.FramelessWindowHint|Qt.WindowStaysOnTopHint|Qt.SubWindow )

#self.setMouseTracking(True);

self.trans=True

self.set_transparency(True)

quitAction = QtGui.QAction(QtGui.QIcon('quit.png'), '&Quit', self)

self.connect(quitAction,signal("triggered()"),QtGui.qApp.quit)

backAction = QtGui.QAction( '&Back', self)

self.connect(backAction,signal("triggered()"),self.backClicked)

self.popMenu= QtGui.QMenu()

self.popMenu.addAction(quitAction)

self.popMenu.addAction(backAction)

def resizeEvent(self, e):

self.handChange()

def backClicked(self):

if self.trans == True :

self.trans = False

self.set_transparency(False)

else:

self.trans = True

self.set_transparency(True)

def mouseReleaseEvent(self,e):

if self.rightButton == True:

self.rightButton=False

self.popMenu.popup(e.globalPos())

def mouseMoveEvent(self, e):

if e.buttons() & Qt.LeftButton:

self.move(e.globalPos()-self.dragPos)

e.accept()

def mousePressEvent(self, e):

if e.button() == Qt.LeftButton:

self.dragPos=e.globalPos()-self.frameGeometry().topLeft()

e.accept()

if e.button() == Qt.RightButton and self.rightButton == False:

self.rightButton=True

def paintEvent(self, e):

time = QTime.currentTime()

qp = QPainter()

qp.begin(self)

qp.setRenderHint(QPainter.Antialiasing) # 开启这个抗锯齿,会很占cpu的!

qp.translate(self.width() / 2, self.height() / 2)

qp.scale(self.side / 200.0, self.side / 200.0)

qp.setPen(QtCore.Qt.NoPen)

qp.setBrush(self.hourColor)

qp.save()

qp.rotate(30.0 * ((time.hour() + time.minute()/ 60.0)))

qp.drawConvexPolygon(self.hourHand)

qp.restore()

qp.setPen(self.hourColor)

for i in range(12):

qp.drawLine(88, 0, 96, 0)

qp.rotate(30.0)

qp.setPen(QtCore.Qt.NoPen)

qp.setBrush(self.minuteColor)

qp.save()

qp.rotate(6.0 * ((time.minute() + (time.second()+time.msec()/1000.0) / 60.0)))

qp.drawConvexPolygon(self.minuteHand)

qp.restore()

qp.setPen(self.minuteColor)

for i in range(60):

if (i % 5) is not 0:

qp.drawLine(92, 0, 96, 0)

qp.rotate(6.0)

qp.setPen(QtCore.Qt.NoPen)

qp.setBrush(self.secondColor)

qp.save()

qp.rotate(6.0*(time.second()+time.msec()/1000.0))

qp.drawConvexPolygon(self.secondHand)

qp.restore()

qp.end()

if __name__ == '__main__':

app = QtGui.QApplication(sys.argv)

clock = Clock()

sys.exit(app.exec_())

例三:

主要是模仿了qt自带的clock例子,然后 通过 python的语法 进行实现,

同时添加了秒针 的实现

用到的工具 有qt 4.8;python 2.7 ;pyqt

import sys

from PyQt4.QtCore import *

from PyQt4.QtGui import *

class clock (QWidget):

def __init__(self):

QWidget.__init__(self,windowTitle="python clock")

timer = QTimer(self)

self.connect(timer, SIGNAL("timeout()"),self,SLOT("update()"))

timer.start(1000)

self.resize(200,200)

def paintEvent(self,e):

hourColorHand = QPolygon([QPoint(7,8),QPoint(-7,8),QPoint(0,-30)])

minuteColorHand = QPolygon([QPoint(7,8),QPoint(-7,8),QPoint(0,-70)])

secondColorHand = QPolygon([QPoint(3,8),QPoint(-3,8),QPoint(0,-90)])

hourColor = QColor(127,0,127)

minuteColor = QColor(0,127,127,191)

secondColor = QColor(0,100,100,100)

painter = QPainter(self);

side = min(self.width(),self.height())

atime =QTime.currentTime()

painter.setRenderHint(QPainter.Antialiasing)

painter.translate(self.width()/2,self.height()/2)

painter.scale(side/200,side/200)

painter.setPen(Qt.NoPen)

painter.setBrush(hourColor)

painter.save()

painter.rotate(30.0*(atime.hour() + atime.minute()/60.0))

painter.drawConvexPolygon(hourColorHand)

painter.restore()

painter.setPen(hourColor)

for i in range(0,12):

painter.drawLine(88,0,96,0)

painter.rotate(30.0)

painter.setPen(Qt.NoPen)

painter.setBrush(minuteColor)

painter.save()

painter.rotate(6.0*(atime.minute()+atime.second()/60.0))

painter.drawConvexPolygon(minuteColorHand)

painter.restore()

painter.setPen(minuteColor)

for i in range(0,60) :

if (i%5)!=0 :

painter.drawLine(92,0,96,0)

painter.rotate(6.0)

painter.setPen(Qt.NoPen)

painter.setBrush(secondColor)

painter.save()

painter.rotate(6.0 * atime.second())

painter.drawConvexPolygon(secondColorHand)

painter.restore()

if __name__ == "__main__" :

q = QApplication(sys.argv)

s = clock()

s.show()

q.exec_()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是 python 项目神奇时钟代码_micropython 学习笔记之 RTC 时钟模块(DS3231)。 首先,我们需要导入相应的模块: ```python from machine import Pin, I2C import utime ``` 然后,我们需要设置 I2C 总线和 RTC 模块的地址: ```python i2c = I2C(scl=Pin(5), sda=Pin(4), freq=100000) rtc_addr = 0x68 ``` 接下来,我们需要定义几个函数来读取和设置 RTC 模块的时间: ```python def bcd2dec(bcd): return (bcd>>4)*10 + (bcd & 0x0f) def dec2bcd(dec): return ((dec//10)<<4) + (dec%10) def get_time(): time = i2c.readfrom_mem(rtc_addr, 0x00, 7) year = bcd2dec(time[6])+2000 month = bcd2dec(time[5]) date = bcd2dec(time[4]) day = bcd2dec(time[3]) hour = bcd2dec(time[2]) minute = bcd2dec(time[1]) second = bcd2dec(time[0]) return year, month, date, day, hour, minute, second def set_time(year, month, date, day, hour, minute, second): i2c.writeto_mem(rtc_addr, 0x00, bytes([dec2bcd(second), dec2bcd(minute), dec2bcd(hour), dec2bcd(day), dec2bcd(date), dec2bcd(month), dec2bcd(year-2000)])) ``` 这些函数分别用于将 BCD 码转换为十进制数、将十进制数转换为 BCD 码、读取当前时间和设置时间。 最后,我们可以写一个循环来不断显示当前时间: ```python while True: year, month, date, day, hour, minute, second = get_time() print("%d-%02d-%02d %02d:%02d:%02d %d" % (year, month, date, hour, minute, second, day)) utime.sleep(1) ``` 这里我们使用了 MicroPython 的时间模块 `utime` 来实现延时功能,每秒钟刷新一次时间。 这就是 python 项目神奇时钟代码_micropython 学习笔记之 RTC 时钟模块(DS3231)的全部内容,希望能对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值