【阅读全文】

文末附完整源代码实现过程...

想实现这样一个功能,然后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("动态指针时钟  公众号:[Python 集中营]")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()'''绘制时钟表盘上面的数字'''# 保存状态painter.save()# 获取字体对象font = painter.font()# 设置粗体font.setBold(True)painter.setFont(font)# 获取字体大小font_size = font.pointSize()# 设置之前定义好的颜色painter.setPen(hour_color)hour_num = 0radius = 100for 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_sizey = radius * 0.8 * sin(i * 30 * pi / 180.0) - font_size / 2.0width = font_size * 2height = font_sizepainter.drawText(QRectF(x, y, width, height), Qt.AlignCenter, str(hour_num))# 恢复状态painter.restore()'''绘制时钟表盘的时、分、秒的指针'''# 获取当前时间time = QTime.currentTime()# 绘制小时指针painter.save()# 取消轮廓线painter.setPen(Qt.NoPen)# 设置小时指针的颜色painter.setBrush(hour_color)# 小时指针逆时针旋转painter.rotate(30 * (time.hour() + time.minute() / 60))# 绘制时钟指针painter.drawConvexPolygon(QPolygonF(hour_point))# 恢复状态painter.restore()# 绘制分钟指针painter.save()# 取消轮廓线painter.setPen(Qt.NoPen)# 设置分钟指针的颜色painter.setBrush(min_color)# 分钟指针逆时针旋转painter.rotate(6 * (time.minute() + time.second() / 60))# 绘制分钟指针painter.drawConvexPolygon(QPolygonF(min_point))# 恢复状态painter.restore()# 绘制秒钟指针painter.save()# 取消轮廓线painter.setPen(Qt.NoPen)# 设置秒针颜色painter.setBrush(sec_color)# 秒钟指针逆时针旋转painter.rotate(6 * time.second())# 绘制秒钟指针painter.drawConvexPolygon(QPolygonF(secn_point))# 恢复状态painter.restore()

最后,还是通过main()函数直接启动整个App。

if __name__ == "__main__":app = QApplication(sys.argv)form = PointerClock()form.show()app.exec_()

公众号内回复"动态时钟",获取完整源代码。

【往期精选】

python 日志中最亮的仔,是喜欢的花里胡哨吖...

hashlib.md5()函数来筛选出系统重复文件并移除...

哈撒给,英雄联盟全皮肤下载器来了...

PyQt5的敏感词检测工具制作,运营者的福音...

手绘图片生成器:以雪容融为例一键生成...

刚刚出炉的冬奥会吉祥物:冰墩墩,附源码...

最优美的表格查看插件:tabulate

抖音同款课堂点名系统,PyQt5写起来很简单...

开工啦!批量向PDF文件添加中文水印...

大年初二、做了一个windows通知管理器!

百度图片下载器2.0

gif动态图片生成器,多张图片组合后生成动图...

动态指针时钟:利用pyqt5制作指针钟表显示实时时间相关推荐

  1. Python利用PyQt5制作一个获取网络实时数据NBA数据播报GUI

    现在NBA联赛也进行到半决赛了,我们怎么样才能以更快的方法获取NBA的数据呢?这里我们就自己来做一个数据播报的程序 文章目录 制作NBA数据爬虫 捋顺思路 编写代码 NBAReporter.py NB ...

  2. python自己做电子词典_利用PyQt5制作电子词典

    详细代码参考github,如果喜欢,欢迎star和fork. 利用PyQt5制作电子词典 年前(2018年12月22日)Crossin编程教室发布了一个制作电子词典的小作业,自己懒懒散散的做了一个,大 ...

  3. Python利用matplotlib制作雷达扫描显示仪(之后可结合串口和超声波传感器使用,亦可以做为仪表盘使用)

    Python利用matplotlib制作雷达扫描显示仪(之后可结合串口和超声波传感器使用,亦可以做为仪表盘使用).内有制作雷达扫描GIF图的源代码包含. ''' matplotlib雷达扫描 ''' ...

  4. 利用PyQt5制作本地音乐播放器

    介绍 本文是对之前的音乐播放器的一些改进和功能实现.只写了有变化的部分,具体部分请看上一篇博客. [利用PyQt5和QSS制作本地音乐播放器(初稿)](https://blog.csdn.net/we ...

  5. RAMMAP(运行内存清理工具)自动释放内存,并利用pyqt5制作图形界面

    上一篇文章用python制作了一个自动清理内存的程序,利用cmd端口调用Rammap,不过只是做了一个托盘图标,这回用pyqt5做一个简单的图形界面,并实现对自动清理模式的一些设置 首先利用pyqt5 ...

  6. php动态模拟时钟,使用canvas制作简易实时动态时钟

    动态时钟 这几天的工作学习对Canvas产生了很高的兴趣,拿回JS红宝书认真又学了一遍Canvas,恰巧书中例子是画一个小钟,但这个例子非常简易而且没有动画效果,由此产生了制作动态时钟的想法. 如果你 ...

  7. 利用PyQt5制作简易二维码生成器

    先来看看效果,主界面大概就是这个样子: 生成成功界面: 生成失败界面: 细节我后面会详细说 首先 pip install pyqt5 然后在pycharm中配置pyqt5,详情请参考这里 三个界面的搭 ...

  8. 利用canvas制作时钟表

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...

  9. 利用js制作动态小时钟

    利用js制作动态小时钟 在学完Date()函数之后,可以用来与CSS结合制作一个能转动的时钟. 新建html文件,写好基本结构,代码如下: <!DOCTYPE html> <html ...

  10. 用 PyQt5 制作动态钟表

    前言 大家好,我是小张~ 记得小时候,家里只有一个钟表用来看时间(含有时针.分针.秒针的那种),挂在墙上哒哒哒响个不停,现在生活条件好了.基本人手一部手机,看时间也不再依靠表了,而今天的文章内容就是与 ...

最新文章

  1. 获取当前绝对工作目录与被执行文件的绝对目录
  2. REHL yum的配置(本地和centos源)
  3. Java 9 关注度不断上升!2018 编程语言流行度大调查
  4. mysql 5.7.19 rpm下载_centos6.8 mysql5.7 rpm安装与完全卸载
  5. Eclipse里面导工程的时候报错faceted project problem
  6. 问题六十八:着色模型(shading model)(1)——反射模型(reflection model)(3.1)——辐射学(Radiometry)
  7. sqlserver 获取当前操作的数据库名称
  8. 4.在屏幕上输出以下图案: * *** ***** ******* ********* *********** ************* *********** *********
  9. pc机收集信息cpu\配置\网络信息
  10. JxBrowser使用心得和带中文翻译的文档分享
  11. 2020-06-16
  12. JNI基础:JNI数据类型和类型描述符
  13. ERNIE: Enhanced Representation through Knowledge Integration, Yu Sun 2020【representation+Bert+ner】
  14. win下 远程控制(教程+工具+黑客常用命令)
  15. 妙控鼠标灵敏度太低怎么办
  16. linux类似的vlookup函数,VLOOKUP进阶——你可能所不知道的VLOOKUP用法
  17. 大话数据结构(五)——栈的两种java实现方式
  18. python-脚本自动生成二维码QRcode/quick response code
  19. [病毒分析]熊猫烧香(下)核心函数部分分析
  20. excel多个窗口独立显示_【技巧】35个Excel表格的基本操作技巧!年前最后一次更新!...

热门文章

  1. 怎样选择合适的电流继电器
  2. 探索智慧医院落地新方案!OFweek 2019医疗物联网大会成功举办
  3. c语言中eof的作用,C语言中EOF是什么意思?
  4. 【转载】英语动词第三人称s的发音规则
  5. 植发搞笑图片_搞笑:终于找到原图了!像不像?
  6. python脚本检查文件内容
  7. SQL实现次日、三日及七日用户留存率的计算
  8. 深度学习与python运用论文心得
  9. 数据库表文档生成工具screw (螺丝钉)
  10. 运用计算机技术和语文教学,计算机信息技术与小学语文教学整合的优势