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_()
登入後複製
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章
刺客信條陰影:貝殼謎語解決方案
4 週前
By DDD
Windows 11 KB5054979中的新功能以及如何解決更新問題
3 週前
By DDD
在哪裡可以找到原子中的起重機控制鑰匙卡
4 週前
By DDD
<🎜>:死鐵路 - 如何完成所有挑戰
1 個月前
By DDD
Atomfall指南:項目位置,任務指南和技巧
1 個月前
By DDD

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Linux終端中查看Python版本時遇到權限問題的解決方法當你在Linux終端中嘗試查看Python的版本時,輸入python...

使用FiddlerEverywhere進行中間人讀取時如何避免被檢測到當你使用FiddlerEverywhere...

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

在使用Python的pandas庫時,如何在兩個結構不同的DataFrame之間進行整列複製是一個常見的問題。假設我們有兩個Dat...

Uvicorn是如何持續監聽HTTP請求的? Uvicorn是一個基於ASGI的輕量級Web服務器,其核心功能之一便是監聽HTTP請求並進�...

攻克Investing.com的反爬蟲策略許多人嘗試爬取Investing.com(https://cn.investing.com/news/latest-news)的新聞數據時,常常�...
