亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python編程如何使用PyQt5制作動態鐘表

發布時間:2021-10-08 15:27:21 來源:億速云 閱讀:132 作者:iii 欄目:開發技術

本篇內容介紹了“Python編程如何使用PyQt5制作動態鐘表”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

目錄
  • 環境配置

  • 實現思路

    • 老式鐘表制作

    • 電子表制作

    • 合并兩表界面

      • 核心代碼

實現思路

實現思路分為大致分為三個部分:老式鐘表制作、電子表制作、兩表合并為一個界面

老式鐘表制作

整體來看老式鐘表界面,有以下幾種圖案:時針、分針、秒針、1-12小時刻度、每格小刻度、每5格一大刻度

在鐘表運行時,時針、分針、秒針 隨時間變化以界面中心為圓點逆時針旋轉一定的角度,這個角度可以計算出來的

為了方便,整個界面效果我用 PyQt5 中的 QPainter 控件來實現,這個控件其實就是一個繪制器,用來繪制界面上的元素

時鐘運行軌跡其實就是把每一秒的畫面拼接在一起,最后組成一個連貫的時間序列圖像,因此重寫了 paintEvent 函數,繪制每一秒實時圖像;

 def paintEvent(self, event):
        hour_points = [QPoint(5,8),QPoint(-5,8),QPoint(0,-30)]
        minute_points = [QPoint(5,8),QPoint(-5,8),QPoint(0,-65)]
        second_points = [QPoint(5,8),QPoint(-5,8),QPoint(0,-80)]
        hour_color = QColor(200,100,0,200)
        minute_color = QColor(0,127,127,150)
        second_color = QColor(0,160,230,150)
        min_len = min(self.width(),self.height())
        time = QTime.currentTime() #獲取當前時間
        painter = QPainter(self)
        painter.setRenderHint(QPainter.Antialiasing)
        painter.translate(self.width()/2,self.height()/2)#平移到窗口中心
        painter.scale(min_len/200.0,min_len/200.0) #進行尺度縮放
        #----------繪制時針------------
        painter.setPen(Qt.NoPen)
        painter.setBrush(hour_color)#顏色
        painter.save()
        # 根據 1小時時= 30°,水品方向逆時針旋轉時針
        painter.rotate(30.0*((time.hour()+time.minute()/60.0)))
        painter.drawConvexPolygon(QPolygon(hour_points))
        painter.restore() # save 退出,可重新設置畫筆
        painter.setPen(hour_color)
        #繪制小時線(360/12 = 30度)
        for i in range(12):
            painter.drawLine(88,0,96,0)#繪制水平線
            painter.rotate(30.0)# 原有旋轉角度上進行旋轉;
        radius = 100 # 半徑
        font = painter.font()
        font.setBold(True)
        painter.setFont(font)
        pointSize = font.pointSize()#字體大小
        # print(pointSize)
        #繪制小時文本
        for i in range(12):
            nhour = i + 3 # 從水平 3 點進行繪制
            if(nhour>12):
                nhour -= 12
            painter.drawText(self.textRectF(radius*0.8,pointSize,i*30),Qt.AlignCenter,str(nhour))

        #繪制分針;
        painter.setPen(Qt.NoPen)
        painter.setBrush(minute_color)
        painter.save()

        # 1分鐘為6°,
        painter.rotate(6.0*(time.minute()+time.second()/60.0))
        painter.drawConvexPolygon(QPolygon(minute_points))
        painter.restore()

        #繪制分針線
        painter.setPen(minute_color)
        for i in range(60):
            if(i%5 !=0):
                painter.drawLine(92,0,96,0)
            painter.rotate(6.0)
        #繪制秒針
        painter.setPen(Qt.NoPen)
        painter.setBrush(second_color)
        painter.save()
        #繪制秒線
        painter.rotate(6.0*time.second())
        painter.drawConvexPolygon(QPolygon(second_points))
        painter.restore()
        painter.setPen(second_color)
        for i in range(360):
            if(i%5!=0 or i%30!=0):#繪制
                painter.drawLine(94,0,96,0)
            painter.rotate(1.0)#旋轉

再設置一個時間計時控件,利用信號槽機制連接界面,每一秒更新一次界面

self.timer = QTimer()  # 定時器
        self.timer.timeout.connect(self.update)
        self.timer.start(1000)  # 每1s 更新一次

電子表制作

電子表制作相對要比 老式鐘表制作 要簡單地多,制作過程中用到 QLCDNumber 控件

QLDNumber 控件用來預覽數字,但上面的樣式讓數字看起來科技感更強,作為電子表預覽是非常不錯的選擇!

使用之前需對該控件的屬性做一下微調,例如字體樣式,控件內占據字符個數、邊框屬性等;

self.lcdNumber = QtWidgets.QLCDNumber(Form)
        self.lcdNumber.setGeometry(QtCore.QRect(0, 0, 250, 50))
        self.lcdNumber.setContextMenuPolicy(QtCore.Qt.DefaultContextMenu)
        self.lcdNumber.setFrameShape(QtWidgets.QFrame.NoFrame)
        self.lcdNumber.setSmallDecimalPoint(False)
        self.lcdNumber.setDigitCount(8)
        self.lcdNumber.setSegmentStyle(QtWidgets.QLCDNumber.Flat)
        self.lcdNumber.setProperty("value", 2021.0)
        self.lcdNumber.setObjectName("lcdNumber")

電子表運行效果也是借助于計時控件,每秒更新一次當前界面的時間,但這里沒用到 QPainter

 		self.lcdNumber.display('00:00:00')
        time_slot =QTimer(self)
        # time_slot.setInterval(1000)
        # time_slot.start()
        time_slot.timeout.connect(self.event_1)
        time_slot.start(1000)
    def event_1(self):
        time_format = QTime.currentTime()
        time_format = time_format.toString("hh:mm:ss")
        self.lcdNumber.display(time_format)
        QApplication.processEvents()

合并兩表界面

兩個表界面創建完畢之后,最后用一個 Widget 作為基類,利用 Qt 的水平布局把兩個表水平拼接在一起,形成了最終的效果

核心代碼
  		self.label1 = Clock_paint()
        self.label2 = MyWidget()
        self.horizon_layout = QHBoxLayout()
        self.horizon_layout.addWidget(self.label1)
        self.horizon_layout.addWidget(self.label2)
        self.setLayout(self.horizon_layout)
        self.setWindowTitle('時鐘--《公號:小張Python》')
        self.setWindowIcon(QIcon('clock.jpg'))

“Python編程如何使用PyQt5制作動態鐘表”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

襄汾县| 黄山市| 合川市| 杭锦旗| 罗定市| 政和县| 白水县| 福贡县| 内乡县| 贡嘎县| 沙坪坝区| 泰顺县| 大关县| 苏州市| 饶阳县| 驻马店市| 银川市| 保靖县| 松潘县| 吴江市| 郓城县| 自治县| 凤城市| 三明市| 汝州市| 横峰县| 松溪县| 卓资县| 同心县| 犍为县| 鹤岗市| 南皮县| 盐边县| 英山县| 北宁市| 陇西县| 天门市| 扎赉特旗| 吴桥县| 古丈县| 西贡区|