当前位置: 首页 > wzjs >正文

wordpress游戏网站主题做招牌的广告公司

wordpress游戏网站主题,做招牌的广告公司,做网站新手流程,微机做网站的软件PyQt5实用小工具:工作时长计算器工具开发全解析 🌈 个人主页:创客白泽 - CSDN博客 🔥 系列专栏:🐍《Python开源项目实战》 💡 热爱不止于代码,热情源自每一个灵感闪现的夜晚。愿以开…

PyQt5实用小工具:工作时长计算器工具开发全解析

在这里插入图片描述
请添加图片描述

🌈 个人主页:创客白泽 - CSDN博客
🔥 系列专栏:🐍《Python开源项目实战》
💡 热爱不止于代码,热情源自每一个灵感闪现的夜晚。愿以开源之火,点亮前行之路。
👍 如果觉得这篇文章有帮助,欢迎您一键三连,分享给更多人哦

请添加图片描述
在这里插入图片描述


摘要:
在日常工作和项目管理中,准确计算工作时长是非常重要的。本文将深入讲解如何利用PyQt5开发一个简单易用的“工作时长计算器”桌面应用,涵盖设计思路、功能实现、UI布局、核心代码解析及打包细节。文中配有示例代码和界面截图,帮助读者快速掌握PyQt5实战技能。


目录

  • 概述
  • 功能介绍
  • 界面展示
  • 软件使用步骤说明
  • 代码详解
    • 窗口初始化与布局
    • 工作时长计算核心逻辑
    • 剪贴板复制与状态提示
    • 窗口置顶功能
  • 源码下载
  • 总结与展望

概述

随着远程办公和弹性工作制的兴起,个人及团队对于工作时长的准确统计需求日益增长。虽然市面上有众多复杂的考勤软件,但对于简单的时间计算需求,一个轻量级且界面友好的桌面应用更具实用性和便利性。

本文介绍的“工作时长计算器”基于Python的PyQt5库开发,体积小巧,界面简洁,支持用户输入上下班时间,一键计算出当天工作时长,并可将结果复制到剪贴板,方便粘贴到日报、考勤系统或聊天工具中。


功能介绍

  • 输入上下班时间(HH:MM格式)
  • 自动计算并显示工作时长,支持跨天工作时段
  • 复制工作时长到剪贴板,一键分享
  • 窗口置顶功能,方便随时查看和操作
  • 友好的错误提示,避免无效时间格式输入
  • 自定义窗口图标与样式美化,提升用户体验

界面展示

1. 主界面

在这里插入图片描述

图1:工作时长计算器主界面,简洁明了,支持键盘输入与按钮操作

2. 计算结果显示与复制反馈

在这里插入图片描述

图2:计算完成后显示时长,点击复制按钮弹出提示


软件使用步骤说明

  1. 启动程序:运行python work_time_calculator.py
  2. 输入上班时间:如08:30
  3. 输入下班时间:如17:45
  4. 点击“计算工作时长”按钮,显示工作时长,例如08:15
  5. 点击“复制时长”按钮,将结果复制到剪贴板,方便粘贴
  6. 勾选“窗口置顶”,保持程序界面在最前端
  7. 如输入格式错误,弹出错误提示框,请按提示修改时间格式

代码详解

窗口初始化与布局

class WorkTimeCalculator(QWidget):def __init__(self):super().__init__()self.setWindowTitle("工作时长计算器")self.setFixedSize(320, 380)# 设置窗口图标icon_path = self.resource_path("time.ico")self.setWindowIcon(QIcon(icon_path))# 窗口置顶属性self.setWindowFlags(self.windowFlags() | Qt.WindowStaysOnTopHint)self.duration_str = ""self.init_ui()
  • QWidget是PyQt中最基础的窗口类。
  • 固定窗口大小,保证UI布局一致性。
  • 使用自定义图标美化程序。
  • 通过Qt.WindowStaysOnTopHint保持窗口置顶。

UI组件布局采用QVBoxLayout垂直堆叠控件,样式使用QFontsetStyleSheet增强视觉体验。


工作时长计算核心逻辑

def calculate_time(self):start_text = self.input_start.text().strip()end_text = self.input_end.text().strip()try:start_time = datetime.strptime(start_text, "%H:%M")end_time = datetime.strptime(end_text, "%H:%M")if end_time < start_time:end_time = end_time.replace(day=start_time.day + 1)duration = end_time - start_timetotal_minutes = duration.seconds // 60hours = total_minutes // 60minutes = total_minutes % 60self.duration_str = f"{hours:02}:{minutes:02}"self.result_label.setText(f"🧮 工作时长:{self.duration_str}")except ValueError:QMessageBox.warning(self, "❌ 错误", "请输入有效时间格式,如 09:00")
  • 使用datetime.strptime解析输入时间。
  • 处理跨天工作(如夜班,结束时间小于开始时间时,自动视为第二天)。
  • 计算时间差,转换成小时和分钟。
  • 结果格式化为HH:MM,更新界面标签显示。
  • 异常处理避免程序崩溃,弹出错误提示框。

剪贴板复制与状态提示

def copy_duration(self):if self.duration_str:QApplication.clipboard().setText(self.duration_str)self.show_status_message(f"⏱️ 时长 {self.duration_str} 已复制到剪贴板", 1200)else:QMessageBox.warning(self, "⚠️ 无数据", "请先计算工作时长")def show_status_message(self, message, timeout=1000):self.status_label.setText(message)self.status_label.setVisible(True)QTimer.singleShot(timeout, lambda: self.status_label.setVisible(False))
  • 复制时长字符串到系统剪贴板。
  • 使用状态栏显示短暂提示,提升用户交互体验。
  • 未计算前复制操作给出警告提示。

窗口置顶功能

def toggle_topmost(self, state):if state == Qt.Checked:self.setWindowFlags(self.windowFlags() | Qt.WindowStaysOnTopHint)else:self.setWindowFlags(self.windowFlags() & ~Qt.WindowStaysOnTopHint)self.show()
  • 通过QCheckBox切换窗口置顶属性。
  • 动态刷新窗口状态,确保设置生效。

源码下载

import sys
import os
from PyQt5.QtWidgets import (QApplication, QWidget, QLabel, QLineEdit, QPushButton,QVBoxLayout, QMessageBox, QCheckBox
)
from PyQt5.QtGui import QFont, QIcon
from PyQt5.QtCore import Qt, QTimer
from datetime import datetimeclass WorkTimeCalculator(QWidget):def __init__(self):super().__init__()self.setWindowTitle("工作时长计算器")self.setFixedSize(320, 380)# 设置窗口图标icon_path = self.resource_path("time.ico")self.setWindowIcon(QIcon(icon_path))self.setWindowFlags(self.windowFlags() | Qt.WindowStaysOnTopHint)self.duration_str = ""self.init_ui()def init_ui(self):font = QFont("Arial", 12)self.label_start = QLabel("👨‍💼 上班时间 (HH:MM):")self.label_start.setFont(font)self.input_start = QLineEdit()self.input_start.setPlaceholderText("如:08:30")self.input_start.setFont(font)self.input_start.setStyleSheet("""QLineEdit {border: 2px solid #ccc;border-radius: 10px;padding: 6px 10px;}""")self.label_end = QLabel("🏠 下班时间 (HH:MM):")self.label_end.setFont(font)self.input_end = QLineEdit()self.input_end.setPlaceholderText("如:17:45")self.input_end.setFont(font)self.input_end.setStyleSheet("""QLineEdit {border: 2px solid #ccc;border-radius: 10px;padding: 6px 10px;}""")self.button_calc = QPushButton("✅ 计算工作时长")self.button_calc.setFont(font)self.button_calc.setStyleSheet("""QPushButton {background-color: #4CAF50;color: white;border: none;border-radius: 10px;padding: 8px;}QPushButton:hover {background-color: #45a049;}QPushButton:pressed {background-color: #3e8e41;}""")self.button_calc.clicked.connect(self.calculate_time)self.result_label = QLabel("🧮 工作时长:--:--")self.result_label.setFont(QFont("Arial", 13, QFont.Bold))self.copy_button = QPushButton("📋 复制时长")self.copy_button.setFont(font)self.copy_button.setStyleSheet("""QPushButton {background-color: #2196F3;color: white;border: none;border-radius: 10px;padding: 8px;}QPushButton:hover {background-color: #1e88e5;}QPushButton:pressed {background-color: #1976d2;}""")self.copy_button.clicked.connect(self.copy_duration)self.checkbox_topmost = QCheckBox("📌 窗口置顶")self.checkbox_topmost.setFont(font)self.checkbox_topmost.setChecked(True)self.checkbox_topmost.stateChanged.connect(self.toggle_topmost)self.status_label = QLabel("")self.status_label.setFont(QFont("Arial", 10))self.status_label.setStyleSheet("color: white; background-color: #444; padding: 4px; border-radius: 4px;")self.status_label.setAlignment(Qt.AlignCenter)self.status_label.setVisible(False)layout = QVBoxLayout()layout.setSpacing(8)layout.setContentsMargins(16, 16, 16, 16)layout.addWidget(self.label_start)layout.addWidget(self.input_start)layout.addWidget(self.label_end)layout.addWidget(self.input_end)layout.addWidget(self.button_calc)layout.addWidget(self.result_label)layout.addWidget(self.copy_button)layout.addWidget(self.checkbox_topmost)layout.addWidget(self.status_label)self.setLayout(layout)def calculate_time(self):start_text = self.input_start.text().strip()end_text = self.input_end.text().strip()try:start_time = datetime.strptime(start_text, "%H:%M")end_time = datetime.strptime(end_text, "%H:%M")if end_time < start_time:end_time = end_time.replace(day=start_time.day + 1)duration = end_time - start_timetotal_minutes = duration.seconds // 60hours = total_minutes // 60minutes = total_minutes % 60self.duration_str = f"{hours:02}:{minutes:02}"self.result_label.setText(f"🧮 工作时长:{self.duration_str}")except ValueError:QMessageBox.warning(self, "❌ 错误", "请输入有效时间格式,如 09:00")def copy_duration(self):if self.duration_str:QApplication.clipboard().setText(self.duration_str)self.show_status_message(f"⏱️ 时长 {self.duration_str} 已复制到剪贴板", 1200)else:QMessageBox.warning(self, "⚠️ 无数据", "请先计算工作时长")def show_status_message(self, message, timeout=1000):self.status_label.setText(message)self.status_label.setVisible(True)QTimer.singleShot(timeout, lambda: self.status_label.setVisible(False))def toggle_topmost(self, state):if state == Qt.Checked:self.setWindowFlags(self.windowFlags() | Qt.WindowStaysOnTopHint)else:self.setWindowFlags(self.windowFlags() & ~Qt.WindowStaysOnTopHint)self.show()def resource_path(self, relative_path):"""解决打包后资源路径问题"""if hasattr(sys, '_MEIPASS'):return os.path.join(sys._MEIPASS, relative_path)return os.path.join(os.path.abspath("."), relative_path)if __name__ == "__main__":app = QApplication(sys.argv)app.setStyle("Fusion")window = WorkTimeCalculator()window.show()sys.exit(app.exec_())

总结与展望

本文详细介绍了基于PyQt5的“工作时长计算器”的开发过程,涵盖了窗口设计、时间处理逻辑、交互细节及用户体验优化。该工具简单实用,适合日常办公人员快速统计工作时长。

未来可以拓展的功能有:

  • 支持批量导入多天时间记录,自动生成日报
  • 增加午休、加班等特殊时段计算支持
  • 导出统计报表(Excel、PDF等格式)
  • 美化UI,支持多语言切换和主题模式

欢迎大家试用源码,提出宝贵意见,共同完善!


文章转载自:

http://00000000.Lwcqh.cn
http://00000000.Lwcqh.cn
http://00000000.Lwcqh.cn
http://00000000.Lwcqh.cn
http://00000000.Lwcqh.cn
http://00000000.Lwcqh.cn
http://00000000.Lwcqh.cn
http://00000000.Lwcqh.cn
http://00000000.Lwcqh.cn
http://00000000.Lwcqh.cn
http://00000000.Lwcqh.cn
http://00000000.Lwcqh.cn
http://00000000.Lwcqh.cn
http://00000000.Lwcqh.cn
http://00000000.Lwcqh.cn
http://00000000.Lwcqh.cn
http://00000000.Lwcqh.cn
http://00000000.Lwcqh.cn
http://00000000.Lwcqh.cn
http://00000000.Lwcqh.cn
http://00000000.Lwcqh.cn
http://00000000.Lwcqh.cn
http://00000000.Lwcqh.cn
http://00000000.Lwcqh.cn
http://00000000.Lwcqh.cn
http://00000000.Lwcqh.cn
http://00000000.Lwcqh.cn
http://00000000.Lwcqh.cn
http://00000000.Lwcqh.cn
http://00000000.Lwcqh.cn
http://www.dtcms.com/wzjs/619601.html

相关文章:

  • 合肥快速建站在线咨询佛山企业网站推广
  • 网站建设经费预算表信息流优化师是什么
  • 网站线框图用什么做百讯科技网站建设
  • 奇缦科技珠海网站建设优化购物网站排行榜
  • 大网站的建设重点wordpress 模版 婚礼
  • 安卓端网站开发ide如何做网站来做淘宝客
  • 网站建设的技术有哪些内容seo技术培训山东
  • 无锡网站建设专注千客云网络学校的网站的代码模板下载
  • 苏州网站建设科技中国wordpress用的人少
  • 网站** 教程深圳宝安区必去景点
  • 网站建设服务标准化wordpress安装大淘客
  • 如何做网站域名装修室内设计效果图
  • 网站建设哪家好推荐万维科技网站建设风险评估
  • 外贸soho建站公司网站开发的目的
  • 电子网站建设考试网络营销师资格证
  • 网站建设教程视频西瓜全国信用网站一体化建设
  • 做网站的竞品分析营销网站建设是什么意思
  • 可以带锚文本的网站哪有做企业网站
  • 做cpa的网站源码php网站开发工程师面试
  • 海珠建网站多少钱福州优秀网站建设公司
  • 如何把网站做的更好杭州蒙特网站建设
  • 中山有做网站的公司吗权威发布高清图片
  • 抚顺营销型网站建设专业的网站建设排名
  • 获得网站管理员密码几度设计网站
  • 网站最好的优化是什么163网易企业邮箱入口
  • 中山精品网站建设机构网站建设成本报表
  • 网站建设翻译英文做熊猫tv网站的目的
  • 浙江省网站建设微信公众号推广网站
  • 有哪些公司的网站设计的好政务网站模版
  • 从零开始学手机网站开发教程网站建设合同书模板