【开源解析】基于 Python + Qt 打造智能应用时长统计工具 – 你的数字生活分析师
在现代数字生活中,我们每天都会接触到各种各样的应用程序。无论是社交媒体、办公软件,还是游戏、视频应用,我们花费了大量的时间在这些工具上。然而,我们是否真的知道自己在这些应用上花费了多少时间?
本文将带你一起用 Python 和 Qt 创建一个智能的 应用时长统计工具,帮助你分析自己在不同应用上的使用时长,让你更好地管理自己的数字生活。
目录
- 项目概述
- 技术栈介绍
- 环境搭建
- 项目结构
- 实现核心功能
- 监控应用启动和关闭时间
- 统计应用使用时长
- 界面显示和交互
- 项目优化与扩展
- 总结
1. 项目概述
本项目的目标是开发一个智能应用时长统计工具,能够监控和记录你在不同应用程序上的使用时长。通过提供可视化的界面,帮助用户了解自己在数字生活中的时间分配,从而更好地管理时间和生活节奏。
工具的功能包括:
- 自动监控系统中的应用程序
- 记录应用程序的启动和关闭时间
- 计算并统计每个应用程序的使用时长
- 可视化展示统计数据(例如图表、表格等)
- 支持定时保存统计数据
2. 技术栈介绍
为了实现这个应用时长统计工具,我们将使用以下技术栈:
- Python:作为开发语言,Python 简洁易懂,且有大量的库支持。
- PyQt5:用来构建 GUI 界面,PyQt5 是 Python 中非常流行的 Qt 库,提供了丰富的图形用户界面组件。
- Psutil:用于获取系统中正在运行的进程信息,从而实现对应用程序的监控。
- SQLite:用于存储应用程序使用数据,以便进行后续分析和统计。
- Matplotlib:用于生成可视化图表,帮助用户直观地查看各应用程序的使用情况。
3. 环境搭建
3.1 安装必要的库
首先,确保已经安装了 Python。然后,使用以下命令安装所需的库:
pip install pyqt5 psutil matplotlib sqlite3
- PyQt5:用于开发图形界面。
- Psutil:用于获取系统进程信息。
- Matplotlib:用于绘制图表。
- SQLite3:内置在 Python 中,用于数据库操作。
3.2 安装 PyQt5 Designer(可选)
如果你希望使用 Qt Designer 来可视化设计 GUI,可以从官方页面下载并安装 PyQt5 Designer。
4. 项目结构
以下是项目的基本结构:
/your_project
/assets
logo.png # 项目图标
/src
app.py # 主程序文件
monitor.py # 监控系统进程
database.py # 数据库操作
gui.py # PyQt5 界面
/db
usage_data.db # 存储应用时长数据
- app.py:主程序,负责启动监控和界面。
- monitor.py:负责监控系统中各个应用程序的启动和关闭。
- database.py:负责与数据库交互,存储应用程序使用时长数据。
- gui.py:构建图形用户界面。
5. 实现核心功能
5.1 监控应用启动和关闭时间
我们使用 psutil
来获取当前系统中的所有进程,并监控应用程序的启动和退出时间。通过比较当前的进程与之前记录的进程,我们可以判断出哪些应用程序已经启动或关闭。
import psutil
import time
class AppMonitor:
def __init__(self):
self.processes = {}
def get_running_apps(self):
"""获取当前系统中的所有进程"""
running_apps = {}
for proc in psutil.process_iter(attrs=['pid', 'name', 'create_time']):
try:
name = proc.info['name']
pid = proc.info['pid']
start_time = proc.info['create_time']
running_apps[pid] = {'name': name, 'start_time': start_time}
except (psutil.NoSuchProcess, psutil.AccessDenied):
continue
return running_apps
def monitor_apps(self):
"""监控应用程序的启动与关闭"""
while True:
running_apps = self.get_running_apps()
# 检测新启动的应用
for pid, app in running_apps.items():
if pid not in self.processes:
self.processes[pid] = {'name': app['name'], 'start_time': app['start_time'], 'end_time': None}
# 检测结束的应用
for pid in list(self.processes.keys()):
if pid not in running_apps:
self.processes[pid]['end_time'] = time.time()
time.sleep(1)
5.2 统计应用使用时长
一旦监控到应用程序的启动和关闭时间,我们就可以通过保存应用的使用时长来进行统计。每次检测到应用关闭时,就可以计算该应用的使用时长,并将数据保存到 SQLite 数据库中。
import sqlite3
class Database:
def __init__(self, db_name='usage_data.db'):
self.conn = sqlite3.connect(db_name)
self.cursor = self.conn.cursor()
self._create_table()
def _create_table(self):
"""创建数据库表"""
self.cursor.execute('''CREATE TABLE IF NOT EXISTS app_usage (
id INTEGER PRIMARY KEY,
app_name TEXT,
start_time REAL,
end_time REAL,
duration REAL)''')
self.conn.commit()
def save_usage(self, app_name, start_time, end_time):
"""保存应用使用数据"""
duration = end_time - start_time
self.cursor.execute('''INSERT INTO app_usage (app_name, start_time, end_time, duration)
VALUES (?, ?, ?, ?)''', (app_name, start_time, end_time, duration))
self.conn.commit()
def get_usage_data(self):
"""获取所有的应用使用时长数据"""
self.cursor.execute('SELECT * FROM app_usage')
return self.cursor.fetchall()
5.3 界面显示和交互
使用 PyQt5
创建简单的图形用户界面,让用户能够查看应用程序的使用时长。
from PyQt5 import QtWidgets
import sys
class AppUsageApp(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
"""初始化界面"""
self.setWindowTitle("应用时长统计工具")
self.setGeometry(100, 100, 800, 600)
# 设置表格
self.table = QtWidgets.QTableWidget(self)
self.table.setGeometry(50, 50, 700, 400)
self.table.setColumnCount(4)
self.table.setHorizontalHeaderLabels(["应用名", "启动时间", "结束时间", "使用时长"])
self.load_data_button = QtWidgets.QPushButton('加载数据', self)
self.load_data_button.setGeometry(50, 500, 100, 30)
self.load_data_button.clicked.connect(self.load_usage_data)
def load_usage_data(self):
"""加载并显示应用使用数据"""
database = Database()
data = database.get_usage_data()
self.table.setRowCount(len(data))
for row, record in enumerate(data):
self.table.setItem(row, 0, QtWidgets.QTableWidgetItem(record[1]))
self.table.setItem(row, 1, QtWidgets.QTableWidgetItem(str(record[2])))
self.table.setItem(row, 2, QtWidgets.QTableWidgetItem(str(record[3])))
self.table.setItem(row, 3, QtWidgets.QTableWidgetItem(str(record[4])))
def main():
app = QtWidgets.QApplication(sys.argv)
window = AppUsageApp()
window.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
5.4 数据可视化
你还可以使用 Matplotlib
来生成使用时长的统计图表。例如,可以显示每个应用程序的使用时长:
import matplotlib.pyplot as plt
def plot_usage_data():
database = Database()
data = database.get_usage_data()
apps = [record[1] for record in data]
durations = [record[4] for record in data]
plt.bar(apps, durations)
plt.xlabel('应用程序')
plt.ylabel('使用时长(秒)')
plt.title('应用使用时长统计')
plt.xticks(rotation=45)
plt.show()
6. 项目优化与扩展
- **
优化监控精度**:通过增加检测频率或使用系统钩子,提升对应用启动和关闭的监控精度。
- 自动启动与后台运行:将程序设计为开机自启动并在后台运行,以便持续监控应用。
- 跨平台支持:确保代码在 Windows、macOS 和 Linux 上的兼容性,或使用跨平台的库。
7. 总结
通过本文的讲解,我们利用 Python 和 Qt 构建了一个智能应用时长统计工具,帮助用户记录并分析自己的应用使用时长。这个工具不仅可以帮助你了解自己在各种应用上的时间分布,还能通过图表和数据导出功能,让你对数字生活有更清晰的掌控。
希望你能通过这个项目更好地管理时间,做出更有效的生活规划!
发表回复