【开源解析】基于 Python + Qt 打造智能应用时长统计工具 – 你的数字生活分析师

在现代数字生活中,我们每天都会接触到各种各样的应用程序。无论是社交媒体、办公软件,还是游戏、视频应用,我们花费了大量的时间在这些工具上。然而,我们是否真的知道自己在这些应用上花费了多少时间?

本文将带你一起用 Python 和 Qt 创建一个智能的 应用时长统计工具,帮助你分析自己在不同应用上的使用时长,让你更好地管理自己的数字生活。


目录

  1. 项目概述
  2. 技术栈介绍
  3. 环境搭建
  4. 项目结构
  5. 实现核心功能
    • 监控应用启动和关闭时间
    • 统计应用使用时长
    • 界面显示和交互
  6. 项目优化与扩展
  7. 总结

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 构建了一个智能应用时长统计工具,帮助用户记录并分析自己的应用使用时长。这个工具不仅可以帮助你了解自己在各种应用上的时间分布,还能通过图表和数据导出功能,让你对数字生活有更清晰的掌控。

希望你能通过这个项目更好地管理时间,做出更有效的生活规划!