Python實現類比時鐘代碼推薦

來源:互聯網
上載者:User
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_()
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.