首页 > 编程 > Python > 正文

Python实现模拟时钟代码推荐

2019-11-25 17:02:53
字体:
来源:转载
供稿:网友

Python实现模拟时钟代码推荐

# coding=utf8import sys, pygame, math, randomfrom 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) # mainpygame.init()screen = pygame.display.set_mode((600,500))pygame.display.set_caption("CLOCK")font = pygame.font.Font(None, 36)orange = 220,180,0white = 255,255,255yellow = 255,255,0pink = 255,100,100 pos_x = 300pos_y = 250radius = 250angle = 360 # repeating loopwhile 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 sysfrom PyQt4 import QtGui, QtCore from PyQt4.QtCore import Qtfrom PyQt4.QtCore import QPointfrom PyQt4.QtCore import QTimerfrom PyQt4.QtCore import QTime from PyQt4.QtGui import QPainterfrom PyQt4.QtGui import QColor from PyQt4.QtGui import QPolygonfrom PyQt4.QtCore import SIGNAL as signalclass 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 sysfrom 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_()

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表