Python實(shí)現(xiàn)模擬時(shí)鐘代碼推薦
Python實(shí)現(xiàn)模擬時(shí)鐘代碼推薦
# 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()
再來(lái)一個(gè)例子
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
# 下面兩個(gè)配合實(shí)現(xiàn)窗體透明和置頂
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) # 開(kāi)啟這個(gè)抗鋸齒,會(huì)很占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例子,然后 通過(guò) python的語(yǔ)法 進(jìn)行實(shí)現(xiàn),
同時(shí)添加了秒針 的實(shí)現(xiàn)
用到的工具 有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實(shí)現(xiàn)時(shí)鐘顯示效果思路詳解
- python使用turtle庫(kù)繪制時(shí)鐘
- python實(shí)現(xiàn)簡(jiǎn)易動(dòng)態(tài)時(shí)鐘
- python實(shí)現(xiàn)簡(jiǎn)易數(shù)碼時(shí)鐘
- python控制臺(tái)顯示時(shí)鐘的示例
- Python Tkinter模塊實(shí)現(xiàn)時(shí)鐘功能應(yīng)用示例
- python+PyQT實(shí)現(xiàn)系統(tǒng)桌面時(shí)鐘
- Python+Pyqt實(shí)現(xiàn)簡(jiǎn)單GUI電子時(shí)鐘
- python基于Kivy寫(xiě)一個(gè)圖形桌面時(shí)鐘程序
- python實(shí)現(xiàn)好看的時(shí)鐘效果
相關(guān)文章
Python實(shí)現(xiàn)將json文件生成C語(yǔ)言的結(jié)構(gòu)體的腳本分享
這篇文章主要為大家詳細(xì)介紹了Python如何實(shí)現(xiàn)將json文件生成C語(yǔ)言的結(jié)構(gòu)體,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-09-09
解決PyQt5 無(wú)邊框后窗口的移動(dòng)問(wèn)題
這篇文章主要介紹了解決PyQt5 無(wú)邊框后窗口的移動(dòng)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,一起跟隨小編過(guò)來(lái)看看吧2021-03-03
Python實(shí)現(xiàn)隨機(jī)分層抽樣的示例詳解
在數(shù)據(jù)分析與機(jī)器學(xué)習(xí)的實(shí)踐中,抽樣是不可或缺的一步,分層抽樣作為一種常用的抽樣方法,能夠確保樣本在不同類(lèi)別中的比例與總體一致,下面我們看看如何使用Python實(shí)現(xiàn)隨機(jī)分層抽樣吧2024-11-11
向量化操作改進(jìn)數(shù)據(jù)分析工作流的Pandas?Numpy示例分析
這篇文章主要介紹了向量化操作改進(jìn)數(shù)據(jù)分析工作流的Pandas?Numpy示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
Python基礎(chǔ)學(xué)習(xí)之模塊的安裝和卸載
其實(shí)現(xiàn)在還是有很多剛開(kāi)始學(xué)習(xí)的小伙伴,會(huì)遇到模塊不會(huì)安裝的情況,或者一遇到報(bào)錯(cuò)就懵了,這樣就很耽誤我們的學(xué)習(xí)進(jìn)度。所以,今天我們就來(lái)了解一下Python幾種安裝模塊的方法吧2022-09-09

