Python中怎么用pyqt5制作指针钟表显示时间
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍"Python中怎么用pyqt5制作指针钟表显示时间",在日常操作中,相信很多人在Python中怎么用pyqt5制作指针钟表显示时间问题上存在疑惑,小编查阅了各式资料,整理出简单好用的
千家信息网最后更新 2026年11月03日Python中怎么用pyqt5制作指针钟表显示时间
这篇文章主要介绍"Python中怎么用pyqt5制作指针钟表显示时间",在日常操作中,相信很多人在Python中怎么用pyqt5制作指针钟表显示时间问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Python中怎么用pyqt5制作指针钟表显示时间"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
想实现这样一个功能,然后pyqt5中又没有现成的组件可以使用,于是就想着只能通过绘图的方式来实现。说到绘图的话,turtle框架无疑是最常见的选择,但其实通过pyqt5的QPainter组件也是可以实现的。而且最后呈现出来的效果还是挺漂亮的。
实现思路:通过使用pyqt5的QPainter组件来绘制好时钟的图表,最后通过定时器不断的改变当前当前时间在图表上面的显示位置。这样最终就实现了一个指针时钟在不断的走动的过程。
和前面的UI应用一样,我们用到的UI相关的组件库还是这三个。
from PyQt5.QtCore import *from PyQt5.QtGui import *from PyQt5.QtWidgets import *
这次新使用了一个数学计算库,因为牵扯到数据计算相关的部分。
from math import *
应用操作相关的模块
import sys
动态时钟的主要实现过程我放在下面了,有需要的朋友可以自己研究一下。
class PointerClock(QWidget): def __init__(self): super().__init__() self.setWindowTitle("动态指针时钟") self.setWindowIcon(QIcon('clock.ico')) self.timer = QTimer() # 设置窗口计时器 self.timer.timeout.connect(self.update) self.timer.start(1000) def paintEvent(self, event): ''' 实时刷新指针图像 :param event: :return: '''分别定义小时、分钟、秒钟的坐标点''' QPoint(int x, int y);创建坐标点,x、y分别代表横坐标、纵坐标 hour_point = [QPoint(7, 8), QPoint(-7, 8), QPoint(0, -30)] min_point = [QPoint(7, 8), QPoint(-7, 8), QPoint(0, -65)] secn_point = [QPoint(7, 8), QPoint(-7, 8), QPoint(0, -80)] '''定义三种颜色、用于后面设置三种指针的颜色''' hour_color = QColor(182, 98, 0, 182) min_color = QColor(0, 130, 130, 155) sec_color = QColor(0, 155, 227, 155) '''获取QWidget对象的宽度和长度的最小值''' min_size = min(self.width(), self.height()) painter = QPainter(self) # 创建坐标系图像绘制对象 painter.setRenderHint(QPainter.Antialiasing) # 将QWidget对象的中心位置作为绘制的中心坐标点 painter.translate(self.width() / 2, self.height() / 2) # 对尺寸进行缩放 painter.scale(int(min_size / 200), int(min_size / 200)) # 保存状态 painter.save() '''绘制时钟表盘的时间刻度线''' for a in range(0, 60): if (a % 5) != 0: # 每1/60绘制一个刻度线作为分钟刻度线 painter.setPen(min_color) painter.drawLine(92, 0, 96, 0) else: # 每5/60绘制一个刻度线作为小时刻度线 painter.setPen(hour_color) painter.drawLine(88, 0, 96, 0) # 绘制小时刻度线 # 每分钟旋转6度 painter.rotate(360 / 60) # 恢复状态 painter.restore() '''绘制时钟表盘上面的数字''' # 获取字体对象 font = painter.font() # 设置粗体 font.setBold(True) painter.setFont(font) # 获取字体大小 font_size = font.pointSize() # 设置之前定义好的颜色 painter.setPen(hour_color) hour_num = 0 radius = 100 for i in range(0, 12): # 按照12小时制,每三个小时绘制一个小时数字,需要遍历4次 hour_num = i + 3 # 按QT-Qpainter的坐标系换算,3小时的刻度线对应坐标轴0度 if hour_num > 12: hour_num = hour_num - 12 # 根据字体的大小计算出写入小时数字的x、y的位置 x = radius * 0.8 * cos(i * 30 * pi / 180.0) - font_size y = radius * 0.8 * sin(i * 30 * pi / 180.0) - font_size / 2.0 width = font_size * 2 height = font_size painter.drawText(QRectF(x, y, width, height), Qt.AlignCenter, str(hour_num)) '''绘制时钟表盘的时、分、秒的指针''' # 获取当前时间 time = QTime.currentTime() # 绘制小时指针 # 取消轮廓线 painter.setPen(Qt.NoPen) # 设置小时指针的颜色 painter.setBrush(hour_color) # 小时指针逆时针旋转 painter.rotate(30 * (time.hour() + time.minute() / 60)) # 绘制时钟指针 painter.drawConvexPolygon(QPolygonF(hour_point)) # 绘制分钟指针 # 设置分钟指针的颜色 painter.setBrush(min_color) # 分钟指针逆时针旋转 painter.rotate(6 * (time.minute() + time.second() / 60)) painter.drawConvexPolygon(QPolygonF(min_point)) # 绘制秒钟指针 # 设置秒针颜色 painter.setBrush(sec_color) # 秒钟指针逆时针旋转 painter.rotate(6 * time.second()) painter.drawConvexPolygon(QPolygonF(secn_point))最后,还是通过main()函数直接启动整个App。
if __name__ == "__main__": app = QApplication(sys.argv) form = PointerClock() form.show() app.exec_()
到此,关于"Python中怎么用pyqt5制作指针钟表显示时间"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
指针
小时
时钟
时间
刻度
颜色
钟表
制作
对象
组件
学习
位置
坐标
字体
数字
标点
表盘
还是
逆时针
三个
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网络科技
什么是科技互联网
保险科技 互联网保险
互联网科技公司经营范围
金融科技还是互联网
互联网金融公司科技
电子科技大学互联网
米客互联网科技
赫美联合互联网科技
撒么互联网科技公司
无锡溥仪互联网科技有限公司
互联网科技公司的市场部门
安控科技rtu产品工业互联网
乌苏新华互联网科技做什么的
允成互联网科技有限公司融资
无锡工业互联网科技有限公司
互联网金融科技元年
云鲸互联网络科技有限公司
湖北辰鑫科技互联网
广州全民伙伴互联网科技有限公司
互联网科技公司的优势
科技信息互联网
广州互联网科技公司
华中科技大学互联网
互联网科技宣传片
现代科技和互联网有关系吗
哈尔滨新华互联网科技学院
上海宁丞科技互联网
互联网科技职业技能培训学校
互联网科技创业有什么好项目