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

本文介绍了两种使用Python实现模拟时钟的方法,一种基于pygame库,另一种基于PyQt4库。代码详细展示了如何绘制时钟的数字、时针、分针和秒针,并实时更新时间。此外,还提到了窗口透明度和鼠标事件的处理。
摘要由CSDN通过智能技术生成

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_()

本文标题: Python实现模拟时钟代码推荐

本文地址: http://www.cppcns.com/jiaoben/python/134563.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值