pyqt制作電子鐘表

      網(wǎng)友投稿 842 2025-04-07

      pyqt制作電子鐘表


      https://github.com/n0bel/PiClock

      自定義表盤背景:

      效果圖:

      code:

      from PyQt5.QtCore import *

      from PyQt5.QtGui import *

      from PyQt5.QtWidgets import *

      class clockForm(QWidget):

      def __init__(self, parent=None):

      super(clockForm, self).__init__(parent)

      self.setWindowTitle("Clock")

      self.timer = QTimer()

      # 設(shè)置窗口計(jì)時(shí)器

      window_pale = QPalette()

      window_pale.setBrush(self.backgroundRole(), QBrush(QPixmap("clock.png")))

      self.setPalette(window_pale)

      self.timer.timeout.connect(self.update)

      self.timer.start(1000)

      def paintEvent(self, event):

      painter = QPainter(self)

      painter.setRenderHint(QPainter.Antialiasing)

      # 設(shè)置表盤中的文字字體

      font = QFont("Times", 6)

      fm = QFontMetrics(font)

      fontRect = fm.boundingRect("99") # 獲取繪制字體的矩形范圍

      # 分針坐標(biāo)點(diǎn)

      minPoints = [QPointF(50, 25), QPointF(48, 50), QPointF(52, 50)]

      # 時(shí)鐘坐標(biāo)點(diǎn)

      hourPoints = [QPointF(50, 35), QPointF(48, 50), QPointF(52, 50)]

      side = min(self.width(), self.height())

      painter.setViewport((self.width() - side) / 2, (self.height() - side) / 2, side, side) # 始終處于窗口中心位置顯示

      # 設(shè)置QPainter的坐標(biāo)系統(tǒng),無論窗體大小如何變化,

      # 窗體左上坐標(biāo)為(0,0),右下坐標(biāo)為(100,100),

      # 因此窗體中心坐標(biāo)為(50,50)

      painter.setWindow(0, 0, 100, 100)

      transform = QTransform()

      # transform.reset()

      # 獲取當(dāng)前時(shí)間

      currentTime = QTime().currentTime()

      hour = currentTime.hour() if currentTime.hour() < 12 else currentTime.hour() - 12

      minite = currentTime.minute()

      second = currentTime.second()

      # 獲取所需旋轉(zhuǎn)角度

      hour_angle = hour * 30.0 + (minite / 60.0) * 30.0

      minite_angle = (minite / 60.0) * 360.0

      second_angle = second * 6.0

      # 時(shí)針

      transform.translate(50, 50)

      transform.rotate(hour_angle)

      transform.translate(-50, -50)

      painter.setWorldTransform(transform)

      painter.setPen(Qt.NoPen)

      painter.setBrush(QBrush(Qt.darkRed))

      painter.drawPolygon(QPolygonF(hourPoints))

      transform.reset()

      # 分針

      transform.translate(50, 50)

      transform.rotate(minite_angle)

      transform.translate(-50, -50)

      painter.setWorldTransform(transform)

      painter.setBrush(QBrush(Qt.darkGreen))

      painter.drawPolygon(QPolygonF(minPoints))

      transform.reset()

      # 秒針

      transform.translate(50, 50)

      transform.rotate(second_angle)

      transform.translate(-50, -50)

      painter.setWorldTransform(transform)

      painter.setPen(QPen(Qt.darkCyan, 1))

      painter.drawLine(50, 50, 50, 20)

      if __name__ == "__main__":

      import sys

      app = QApplication(sys.argv)

      form = clockForm()

      form.show()

      app.exec_()

      繪制表盤,效果圖:

      '''

      Created on 2013-7-2

      @author: badboy

      Email:lucky.haiyu@gmail.com

      QQ:43831266

      '''

      from PyQt5.QtCore import *

      from PyQt5.QtGui import *

      from PyQt5.QtWidgets import *

      class clockForm(QWidget):

      def __init__(self,parent=None):

      super(clockForm,self).__init__(parent)

      self.setWindowTitle("Clock")

      self.timer=QTimer()

      #設(shè)置窗口計(jì)時(shí)器

      self.timer.timeout.connect(self.update)

      self.timer.start(1000)

      def paintEvent(self,event):

      painter=QPainter(self)

      painter.setRenderHint(QPainter.Antialiasing)

      #設(shè)置表盤中的文字字體

      font=QFont("Times",6)

      fm=QFontMetrics(font)

      fontRect=fm.boundingRect("99")#獲取繪制字體的矩形范圍

      #分針坐標(biāo)點(diǎn)

      minPoints=[QPointF(50,25),

      QPointF(48,50),

      QPointF(52,50)]

      #時(shí)鐘坐標(biāo)點(diǎn)

      hourPoints=[QPointF(50,35),

      QPointF(48,50),

      QPointF(52,50)]

      side=min(self.width(),self.height())

      painter.setViewport((self.width()-side)/2,(self.height()-side)/2,

      side,side)#始終處于窗口中心位置顯示

      #設(shè)置QPainter的坐標(biāo)系統(tǒng),無論窗體大小如何變化,

      #窗體左上坐標(biāo)為(0,0),右下坐標(biāo)為(100,100),

      #因此窗體中心坐標(biāo)為(50,50)

      painter.setWindow(0,0,100,100)

      #繪制表盤,使用環(huán)形漸變色

      niceBlue=QColor(150,150,200)

      haloGrident=QRadialGradient(50,50,50,50,50)

      haloGrident.setColorAt(0.0,Qt.lightGray)

      haloGrident.setColorAt(0.5,Qt.darkGray)

      haloGrident.setColorAt(0.9,Qt.white)

      haloGrident.setColorAt(1.0,niceBlue)

      painter.setBrush(haloGrident)

      painter.setPen(QPen(Qt.darkGray,1))

      painter.drawEllipse(0,0,100,100)

      transform=QTransform()

      #繪制時(shí)鐘為0的字,以及刻度

      painter.setPen(QPen(Qt.black,1.5))

      fontRect.moveCenter(QPoint(50,10+fontRect.height()/2))

      painter.setFont(font)

      painter.drawLine(50,2,50,8)#

      painter.drawText(QRectF(fontRect),Qt.AlignHCenter|Qt.AlignTop,"0")

      pyqt制作電子鐘表

      for i in range(1,12):

      transform.translate(50, 50)

      transform.rotate(30)

      transform.translate(-50,-50)

      painter.setWorldTransform(transform)

      painter.drawLine(50,2,50,8)

      painter.drawText(QRectF(fontRect),Qt.AlignHCenter|Qt.AlignTop,"%d" % i)

      transform.reset()

      #繪制分鐘刻度線

      painter.setPen(QPen(Qt.blue,1))

      for i in range(1,60):

      transform.translate(50,50)

      transform.rotate(6)

      transform.translate(-50,-50)

      if i%5!=0:

      painter.setWorldTransform(transform)

      painter.drawLine(50,2,50,5)

      transform.reset()

      #獲取當(dāng)前時(shí)間

      currentTime=QTime().currentTime()

      hour=currentTime.hour() if currentTime.hour()<12 else currentTime.hour()-12

      minite=currentTime.minute()

      second=currentTime.second()

      #獲取所需旋轉(zhuǎn)角度

      hour_angle=hour*30.0+(minite/60.0)*30.0

      minite_angle=(minite/60.0)*360.0

      second_angle=second*6.0

      #時(shí)針

      transform.translate(50,50)

      transform.rotate(hour_angle)

      transform.translate(-50,-50)

      painter.setWorldTransform(transform)

      painter.setPen(Qt.NoPen)

      painter.setBrush(QBrush(Qt.darkRed))

      painter.drawPolygon(QPolygonF(hourPoints))

      transform.reset()

      #分針

      transform.translate(50,50)

      transform.rotate(minite_angle)

      transform.translate(-50,-50)

      painter.setWorldTransform(transform)

      painter.setBrush(QBrush(Qt.darkGreen))

      painter.drawPolygon(QPolygonF(minPoints))

      transform.reset()

      #秒針

      transform.translate(50,50)

      transform.rotate(second_angle)

      transform.translate(-50,-50)

      painter.setWorldTransform(transform)

      painter.setPen(QPen(Qt.darkCyan,1))

      painter.drawLine(50,50,50,20)

      if __name__=="__main__":

      import sys

      app=QApplication(sys.argv)

      form=clockForm()

      form.show()

      app.exec_()

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:Word中多個(gè)文檔怎么合成一個(gè)文件?(把多個(gè)word文件合成一個(gè))
      下一篇:如何講表格a和b內(nèi)容合并
      相關(guān)文章
      亚洲av片劲爆在线观看| 亚洲精品成人a在线观看| 91麻豆精品国产自产在线观看亚洲 | 亚洲精品亚洲人成在线播放| 99人中文字幕亚洲区| 亚洲成色WWW久久网站| 国产亚洲人成网站在线观看不卡| 亚洲中文字幕无码久久2017| 国产AV日韩A∨亚洲AV电影| 国产精品亚洲lv粉色| 精品久久久久久亚洲综合网| 亚洲av第一网站久章草| 成a人片亚洲日本久久| 亚洲A丁香五香天堂网 | 亚洲AV无码乱码在线观看| 亚洲?V乱码久久精品蜜桃| 亚洲成av人片在线观看天堂无码| 偷自拍亚洲视频在线观看| 亚洲AV无码一区二区三区国产 | 香蕉视频在线观看亚洲| 亚洲成色999久久网站| 亚洲AV人无码激艳猛片| 久久精品国产亚洲AV香蕉| 亚洲国产精品成人综合久久久| 亚洲国产av美女网站| 亚洲国产成人精品激情| 亚洲一本一道一区二区三区| 亚洲欧美日本韩国| 国产成人精品亚洲| 亚洲一区二区三区在线播放| 亚洲色精品vr一区二区三区| 久久青青草原亚洲AV无码麻豆| 91亚洲国产在人线播放午夜| 亚洲精品视频免费看| 33333在线亚洲| 亚洲AV无码片一区二区三区| 亚洲av午夜精品一区二区三区| 亚洲乱亚洲乱少妇无码| 亚洲区小说区激情区图片区| 亚洲视频在线免费观看| 色婷五月综激情亚洲综合|