Python中怎么用pyqt5制作指针钟表显示时间
发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,这篇文章主要介绍"Python中怎么用pyqt5制作指针钟表显示时间",在日常操作中,相信很多人在Python中怎么用pyqt5制作指针钟表显示时间问题上存在疑惑,小编查阅了各式资料,整理出简单好用的
千家信息网最后更新 2025年01月21日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安全错误
数据库的锁怎样保障安全
软件开发工程量的计算原理
机房网络安全防护情况
sql数据库批量增加数据
全国最牛的软件开发
温州口碑好的网络技术咨询热线
宜兴进口软件开发品质保障
一年级小朋友谈谈身边网络安全
瀚途网络技术有限公司外包
乐鱼软件开发工作室
太原新中大软件开发有限公司
传感器网络技术产品
举办网络技术培训班
松江区品质数据库服务商前景
麒麟合盛网络技术
触发器 跨服务器
数据库应用技术考试题库
南京乐小刻网络技术有限公司
福建高科技软件开发价钱
哈工大考研网络安全历年分数线
碧桂园软件开发待遇
网彩服务器
湘西软件开发大专学校
简单python软件开发
查找我国贸易内容数据库
删除原来的数据库
数据库增删改查操作步骤
找软件开发投资商
安捷信网络技术
网络安全数据分析统计服
南大通用数据库有多少节点