通过Python实现定时器和利用魔法方法改善友好交互

Python桌面宠物开发实战:tkinter与PIL实现交互式动画 桌面宠物是一种运行在操作系统桌面上的小型应用程序,通过图形用户界面(GUI)和动画技术为用户提供趣味交互体验。其核心原理在于创建无边框、透明的顶层窗口,并利用定时器循环切换图像帧来实现动画效果。在技术实现上,Python的tkinter库负责窗口创建与事件管理,而PIL(Pillow)库则用于图像加载与处理,二者结合能够高效构建轻量级桌面应用。这种技术方案不仅适用于桌面宠物开发,还可广泛应用于屏幕小工具、动态通知提醒等场景。本文以桌面宠物项目为例,详细解析了如何使用tkinter和PIL库实现窗口控制、动画 阅读详情

           实现Python的定时器是需要用到time库,其中需要调用的是localtime()方法,返回的是struct_time的时间格式,实际中只取前六位(年、月、日、时、分、秒)来达到实现计时的目的。今天的博文的重点有两个,一个是定时器实现计算间隔时间和两个间隔时间相加的过程,另一个是对魔法方法“__str__”和“__repr__”的理解和讨论。

           作为一个新手,写博文的过程是自己学习过程中的总结,方便与大家交流和自我回顾,这便是我写博文的初衷。今天的源码是一个视频教程上的案例,而我的原创就是基于源码的总结与收获。源码如下:

import time as t#这里相当一个重命名,为了以后调用方便,time就干脆命名为t

class MyTimer:
    def __init__(self):
        self.unit = ['年','月','天','小时','分钟','秒']
        self.prompt = '未开始计时'
        self.lasted = []
        self.begin = 0
        self.end = 0

    def __str__(self):
        return self.prompt

    __repr__ = __str__ #没有括号的应该,报错很明显如果后面有括号,那么肯定得具有形参

    def start(self):
        self.begin = t.localtime()
        self.prompt = "请先停止再进行新的开始"
        print("计时开始!")

    def stop(self):
        if not self.begin:
            #self.prompt = "请先开始调用start"
            print("请先调用start开始计时!")
        else:
            self.end = t.localtime()
            self._calc()
            print("计时结束!")

    def _calc(self):
        self.lasted = []
        self.prompt = "总共运行了"
        for index in range(6):
            self.lasted.append(self.end[index] - self.begin[index])
            if self.lasted[index]:
                self.prompt  += (str(self.lasted[index]) + self.unit[index])

        self.begin = 0
        self.end = 0

    def __add__(self, other):
        prompt = "一共运行了"
        result = []
        for index in range(6):
            result.append(self.lasted[index] + other.lasted[index])
            if result[index]:
                prompt += (str(result[index]) + self.unit[index])

        return prompt

          总的来说代码的逻辑还是挺清楚的,一共加了两处注释。一处是导入库时的更名操作,另一处是将魔法方法的__str__赋给__repr__,这里__str__不能写成__str__(),因为写成这样就需要一个位置参数,为空则报错,而如果再写成__str__(self),则会报self没有定义的错误。我的理解是,既然魔法方法是可以由自己来定义,而这一句的目的很明显,是将__str__方法返回的字符串的地址赋给__repr__。当检测到某实例对象的字符串形式的属性时会调用__str__,而这句代码又将__str__赋给__repr__,故返回的字符串实际地址中存的内容。如果有了括号,那么可能以为着__str__方法又重新定义。

          如果看到了这篇博文,又有兴趣尝试一下,我的建议是可以将源码放在Python的IDIE中新建的文件里,然后逐步进行尝试运行和分析,之后我会把我在IDIE上分析的过程详细讨论一下(尽管我粘上来的源码是在Pycharm上写的,哈哈,Pycharm舒服一点~~)

         我先简单说一下定时器的逻辑。除过构造方法和返回字符串的方法之外,还有四个方法,分别是记录开始时间(start())、记录终止时间(stop())、记录开始时间与终止时间之间的时间间隔(_calc(),这里定义为了一个内部方法)和重写的相加两个间隔时间的魔法方法(__add__(self,other))。根据之前对localtime()方法的解释,该方法返回的是一个列表,start()和stop()两个方法各自记录一个时刻,由_calc()方法根据两个时刻的差得到一个间隔时间,__add__方法的实现过程与_calc()类似。这两个方法的for循环,就是为了将得到的时刻由年至秒逐个相减(或相加),然后在给结果强制转换为字符串类型,方便连接之后的返回。

         下面是在IDIE中运行的内容:

=================== RESTART: D:/MajorDocuments/IDIEdoc.py ===================
>>> t1 = MyTimer()
>>> t1
未开始计时
>>> t1.start()
计时开始!
>>> t1.stop()
计时结束!
>>> t1
总共运行了11秒
>>> t2 = MyTimer()
>>> t2
未开始计时
>>> t2.stop()
请先开始start!
>>> t2.start()
计时开始!
>>> t2.start()
计时开始!
>>> t2
请先停止再进行新的开始
>>> t2.stop()
计时结束!
>>> t2
总共运行了32秒
>>> t1 + t2
'一共运行了43秒'
>>>
        

         t1和t2是类MyTimer的两个实例对象,首先在输入t1,构造方法中因为prompt的内容和__str__和__repr__,会打印prompt的内容。在start()方法中,会改写prompt,若输入t1,会将改写的prompt的打印出来,由此这里起到了一个提醒运行了start()而没有运行stop()的情况。同样在stop()中的if语句中,即在没有运行start()的情况下,会输出一句提醒没有开始。这里注释了一个改写prompt的代码,因为这句改写是不会输出的,除非是在先输入了stop()之后再输入t1,而这并不再是提醒的意思了。

        在__add__和_calc中也用到了prompt改写(严格地讲,应该都是新建一个字符串类型的对象,让prompt这个对象引用指向它)。

        连续两次输入start(),也就是在第二次再更新一下定义的开始时间的时刻,所以之后的stop()是以最后输入的start()的时刻为准。

       输入有过一对start()和stop()之后,再输入stop(),也就是连续两次输入stop()之后,第二次输入的结果会是返回一个请调用start()的提醒,原因是在_calc中的最后将实例对象的begin和end都重置为0。

       

深入解析C++与Python混合编程:以KBEngine为例剖析语言交互原理与工程实践 在软件架构中,混合语言编程是一种平衡性能与开发效率的经典设计模式,其核心在于实现不同语言间的无缝交互。C++以其高性能和系统级控制能力,常被用于构建计算密集型核心模块;而Python则凭借其灵活性和开发效率,成为快速迭代业务逻辑的首选。两者结合的关键技术原理,是通过Python C API构建的桥接层,实现数据类型的透明转换和双向函数调用。这种技术方案在游戏服务器、科学计算和高性能中间件等领域具有重要价值,能够有效解决单一语言在性能或开发效率上的瓶颈。以KBEngine游戏服务器引擎为例,其C++核心与Py 阅读详情

相关推荐

Textual:用Python构建终端与网页双模交互应用

文本用户界面(TUI)是命令行环境下的重要交互范式,其核心在于将传统静态输出升级为可响应、可事件驱动的动态界面。Textual基于现代异步编程模型(async/await),深度融合trio运行时与声明式UI设计思想,解决了终端应用长期存在的卡顿、事件难管理、跨平台交付成本高等痛点。它不仅支持富文本渲染与组件化布局,更通过textual-web机制实现终端逻辑与浏览器渲染的无缝桥接,使Python开发者无需前端知识即可产出具备键盘导航、鼠标交互、实时刷新能力的双模应用。典型应用场景包括内部运维看板、数据分析

weixin_34194359的博客 371

有效使用PyCharm

1、PyCharm忽略项目内的某些文件夹。选中要忽略的文件,右键忽略。

timertimer的博客 310

树莓派GPIO交互实战:用Python打造可编程声音触发装置

GPIO(通用输入输出)是嵌入式系统与物理世界交互的基础接口,其原理是通过读写引脚的高低电平状态来感知和控制外部设备。在树莓派等单板计算机上,GPIO技术为软硬件结合开发提供了核心支持,其价值在于将数字逻辑转化为真实的物理交互。通过Python等高级语言调用GPIO库,开发者可以快速实现传感器数据采集、执行器控制等应用,极大降低了硬件开发门槛。典型的应用场景包括智能家居控制、互动艺术装置、教育实验设备等。本文以树莓派为平台,结合gpiozero和pygame库,详细讲解如何通过GPIO读取按钮状态并触发音频

weixin_30530939的博客 498

8种用Python实现定时执行任务的方案,一定有你用得到的

class sched.scheduler(timefunc, delayfunc)这个类定义了调度事件的通用接口,它需要外部传入两个参数,timefunc是一个没有参数的返回时间类型数字的函数(常用使用的如time模块里面的time),delayfunc应该是一个需要一个参数来调用、与timefunc的输出兼容、并且作用为延迟多个时间单位的函数(常用的如time模块的sleep)。比如,如下的工作流中,任务T1执行完成,T2和T3才能开始执行,T2和T3都执行完成,T4才能开始执行。

叶落无痕的博客 1万+

利用Codex与Python GUI库打造个性化桌面宠物应用

代码生成模型作为AI辅助编程的核心技术,能够将自然语言指令转化为可执行代码,显著提升开发效率。其原理基于大规模代码库训练,理解编程逻辑与API调用模式,从而快速生成功能片段。在技术价值上,它降低了原型开发门槛,使开发者能聚焦创意实现而非语法细节。典型的应用场景包括快速构建工具脚本、自动化任务及个性化应用。本文以桌面宠物开发为例,结合Python的tkinter库,展示了如何通过精确的需求描述引导模型生成GUI界面、鼠标跟随及交互逻辑代码,并整合调试形成完整项目。

weixin_30920513的博客 521

用Python玩转虚拟现实:Vizard三维引擎快速上手

本文详细介绍了如何使用Python和Vizard三维引擎快速上手虚拟现实开发。从环境配置、模型导入到交互实现和视觉效果提升,提供了全面的实战指南,帮助开发者利用Python的简洁性创建沉浸式3D场景。Vizard的Python原生支持和即时反馈特性使其成为虚拟现实开发的理想选择。

weixin_32296621的博客 220

W10做 .py文件的定时任务

定时启动py文件的操作

l765692971的博客 836

保姆级2.0简易文本编辑器Python

通过对简易文本编辑器性能的初步分析,决定使用搜索算法、撤销和重做算法、自动保存算法、滚动条处理算法、字体大小调整算法,并进入详细设计阶段,详细设计阶段分为界面设计和代码设计,初步打算利用C语言实现程序,但由于搭建图形用户界面库,最后选择了python,pycharm中自带的库,下载 tkinter创建 GUI 界面,但是由于学会的python知识比较少只能实现对文本文件新建、打开、保存、另存、查找、替换文本、插入、删除、撤销和重做等基本操作。菜单模块,包括文件、编辑、视图等菜单,提供各种操作和功能;

m0_74768341的博客 1334

python 定时器

python常用的两种定时器

slclovess的博客 1260

Python与PyQt4:日期时间处理与显示

本章节详细介绍了如何在Python中使用PyQt4框架实现用户界面,并通过LCD数字小部件实时显示系统时钟时间。同时,讲述了如何在屏幕上显示日历,并通过日期编辑小部件处理和展示用户选择的日期。通过实际的代码示例,深入解析了QDate类、QDateEdit类及其相关属性和方法,以及如何将这些类和方法应用于实际的日期时间显示和处理。

weixin_35516273的博客 501

python实现计时器和画图

通过puthon 3.6 + pycharm 实现计时器和画图功能。学习GUI,学习tkinter的使用。

python实现定时器

文章目录python实现定时器1. 使用time,threading 模块2. 使用datetime,threading 模块3. 使用time,schedule 模块 (执行单个任务)4. 使用time,schedule 模块 (执行多个任务)时间有冲突的执行多个任务多线程并发运行多个任务5. 使用apscheduler 模块apscheduler 模块详情介绍代码实现 python实现定时器 ......

小胖_@的博客 2万+

MONAI教程<1>-安装

MONAI的安装非常简单,常用的有两种方法: 直接 pip install monai 从GitHub 上安装 monai是通常配合其他库一起使用的,比如pytorch, nibabel, skimage, pillow等等。缺什么直接pip install 就行

Tina姐的博客 1万+

jQuery 一次定时器_《快速掌握PyQt5》第十章 定时器QTimer和进度条QProgressBar

当我们要让程序定期去执行某函数的时候,QTimer就派上用场了,比如一个游戏程序,它通常会定期去调用一个函数来进行更新操作。而进度条可以用来显示某项任务的进度,从而让用户界面更加友好。我们通常将将QTimer和QProgressBar一起搭配使用,所以本章就一起介绍了。10.1 QTimer以下这个程序中,按钮被点击后,QLabel显示的数字会不断增加:import 1. 首先实例化一个QLab...

weixin_39705193的博客 271

[零基础]用docker搭建Hadoop集群

[零基础]用docker搭建Hadoop集群,每一步都有详细的解释!

weixin_56114243的博客 2万+

#1机器学习(西瓜书)自学记录

《机器学习 》 Datawhale 组队学习, 吃瓜自学笔记。

qq_74168740的博客 1149

Python 桌面宠物制作指南(零基础友好)

本文介绍了一个使用Python开发的桌面宠物程序,通过tkinter实现图形界面。主要功能包括:可拖动的交互式宠物、随机眨眼和移动动画、状态系统(幸福感和能量值)、右键菜单操作(喂食/玩耍/睡觉)。文章提供了完整代码实现,涵盖了GUI创建、事件绑定、动画逻辑等关键技术点,并给出了自定义宠物外观、添加音效等扩展建议。该程序适合Python初学者学习基础GUI开发,可作为兴趣项目进一步扩展为更复杂的桌面应用。

2301_78095812的博客 1361

全球建筑物提取数据集(免费下载):微软/GlobalMLBuildingFootprints

这个是GitHub上的开源数据集: https://github.com/microsoft/GlobalMLBuildingFootprints 介绍 必应地图正在世界各地发布开放式建筑足迹。我们从 2014 年到 2021 年间的 Bing Maps 图像中检测到了 7.77 亿座建筑物,包括 Maxar 和 Airbus 的图像。数据可在 ODbL 下免费下载和使用。该数据集补充了我们的其他版本。 包括的地区 执照 此数据由 Microsoft 根据Open Dat..

此星光明博客 6290

Python命令行小说阅读器开发:从curses交互到进度持久化实战

命令行界面(CLI)是开发者与系统交互的核心方式,其通过文本指令实现高效操作。在Python生态中,curses库提供了强大的终端控制能力,能够实现光标定位、颜色控制和屏幕刷新,为构建丰富的命令行应用奠定了基础。这种技术不仅提升了工具的专业性,还能通过自动化脚本解决重复性工作,具有很高的工程实践价值。在文本处理、系统监控、快速原型开发等场景中尤为实用。本文聚焦于利用curses和sqlite3,开发一个具备翻页、进度保存和书籍管理功能的命令行小说阅读器,其中涉及了curses库的精细控制和sqlite3的轻

weixin_34417183的博客 402

霜冰优化算法(RIME)详解:从自然现象到智能优化

霜冰优化算法(RIME)是一种新型元启发式优化算法,灵感源于自然界中霜冰的形成过程。该算法通过模拟软霜和硬霜的不同生长特性,实现了高效的全局探索和局部开发平衡。RIME算法包含三个核心机制:软霜搜索策略模拟随机覆盖特性实现全局探索;硬霜穿刺机制模拟定向生长特性进行局部开发;正向贪婪选择机制确保解的持续优化。与遗传算法、粒子群算法相比,RIME具有参数少、收敛快、自适应平衡等优势,特别适合处理高维复杂优化问题。算法已在工程优化、机器学习等领域获得广泛应用,发表一年内即成为高被引论文。

qq_42212808的博客 786

YOLOv11半监督学习深度解析:基于FixMatch改进的先进目标检测框架

本文探讨了半监督学习与YOLOv11结合的创新方法。针对目标检测中半监督学习面临的伪标签质量不稳定、特征一致性难保证等挑战,研究提出改进版FixMatch框架。通过分析YOLOv11架构特性(如多尺度特征提取、双标签分配策略等)与半监督学习的适配性,设计了三项关键技术改进:空间感知阈值策略、多任务解耦处理和记忆增强机制。该方法在少量标注数据下可实现接近全监督的性能,显著降低工业检测等场景的数据标注成本。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 2085

用Python打造个性化桌面宠物,简单有趣的开发体验

对于想快速体验桌面宠物效果的朋友,平台的一键部署功能尤其实用。生成项目后点击部署,就能立即看到自己的宠物在浏览器中活灵活现,省去了本地安装各种依赖的麻烦。无需配置环境,输入简单描述就能生成基础代码框架,再根据自己的需求调整细节即可。实际使用中发现生成的项目可以直接预览效果,修改代码也能实时看到变化,对初学者非常友好。通过Python的tkinter库创建无边框窗口,配合pyautogui获取屏幕尺寸,确保宠物始终显示在合适位置。可以准备不同动作的GIF文件,如站立、跑步等状态,让宠物行为更丰富。

GarnetFalcon73的博客 513

第2.0章 机器人C++学习开篇(一):SLAM为什么使用C++语言及学习路线资料推荐

ROS(机器人操作系统):机器人领域的“操作系统”,提供节点通信、参数管理、工具链支持,是SLAM算法在机器人上部署的核心框架。PCL(点云库):处理三维点云数据的利器,包含滤波、分割、配准等算法,是激光SLAM的核心依赖。Eigen(矩阵运算库):高效的矩阵与线性代数运算库,SLAM中的位姿变换、优化求解都依赖它。Ceres/G2O(优化库):SLAM后端优化的“王牌”,Ceres擅长通用非线性优化,G2O则专为图优化设计,二者是BA( bundle adjustment)等算法的实现基础。

行知SLAM 1244

基于Qt与C++构建Python集成开发环境:从进程管理到IDE实现

集成开发环境(IDE)是现代软件开发的核心工具,它通过图形化界面整合代码编辑、编译、调试与执行等功能,极大提升了开发效率。其底层原理通常涉及进程管理、跨语言交互与实时数据流处理等关键技术。在工程实践中,利用C++的高性能与Qt的跨平台GUI能力,结合Python解释器,可以构建轻量级IDE,实现代码编辑与执行的闭环。QProcess作为Qt中管理外部进程的核心组件,能够安全地启动并监控Python解释器,处理标准输入输出流,同时通过信号槽机制实现非阻塞的实时交互。这种架构不仅适用于教学演示,也为开发自定义脚

diaoju3333的博客 923

大厂硬件笔试机试题ASIC设计方向-卷3

本文提供了30道硬件工程师机试题目,涵盖数字逻辑、模拟电路、CMOS和信号处理等核心领域。选择题和判断题均配有详细解析,重点考察Verilog编程、CMOS特性、触发器设计、采样定理等知识点。题目难度适中但覆盖面广,如Verilog中阻塞/非阻塞赋值的区别、CMOS静态功耗来源、Nyquist采样定理、通用逻辑门判断等。备考建议强调掌握逻辑门设计、Verilog时序电路编写和CMOS特性理解。这些题目反映了华为等大厂硬件机试的典型考查内容,通过系统复习可有效提升机试成绩,为后续面试奠定基础。

启芯硬件的博客 545

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

扣子智能客服超时引导配置实战:1分钟无交互自动触发消息的最佳实践

在智能客服的实际运营中,我们常常关注响应速度、回答准确率,却容易忽略一个“沉默的杀手”——会话超时。想象一下这个场景:用户在电商平台咨询一件商品,客服机器人快速响应了。但用户可能被临时工作打断,或者需要时间去查找商品详情,超过一分钟没有再说话。此时,会话界面一片寂静,用户回来时可能已经忘记刚才聊到哪里,或者干脆直接关闭了窗口。数据不会说谎。在一些教育类应用的客服模块中,我们曾观察到,超过1分钟无交互的会话,其最终转化率(如完成课程咨询、预约试听)比有持续交互的会话低近40%。

2600_94960079的博客 761

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

上一篇: 利用Python对文本文件进行简单的处理
下一篇: (转)为什么LISP语言如此先进?
梅雨心情
博客等级 码龄11年 39粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值