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

在数字化生活日益普及的今天,如何了解自己每天使用各种应用的时长、行为习惯,已成为许多人关注的话题。尤其对于提高工作效率、合理规划时间等方面,了解自己的数字生活尤为重要。本文将解析如何基于 Python 和 Qt 开发一个 智能应用时长统计工具,成为你数字生活的分析师。

项目概述

我们的目标是开发一个跨平台的应用时长统计工具,通过记录和统计用户的应用使用时长、频次等信息,帮助用户分析自己的数字行为,从而帮助调整日常生活和工作模式。

开发框架与工具

  • Python:作为开发语言,Python具有跨平台的优势,丰富的第三方库,适合快速开发。
  • Qt:用于开发GUI(图形用户界面)应用。PyQt或PySide是Python与Qt框架的绑定库,能够快速构建用户友好的界面。
  • SQLite:用于本地存储用户的数据,如应用使用时长、频次等。

功能简介

  1. 记录应用使用时长:工具能够自动记录每个应用程序的使用时长。
  2. 时长统计:生成时长统计报告,分析哪些应用占用了最多的时间。
  3. 分类管理:根据不同的应用类型(如工作、娱乐、社交等),进行分类统计。
  4. 数据可视化:通过图表、曲线等形式,帮助用户清晰地看到自己的使用习惯。
  5. 通知与提醒:定时提醒用户合理使用应用,避免过度沉迷。

1. 构建 Python + Qt 的桌面应用界面

首先,我们使用 PyQt5 或 PySide2 结合 Python 来构建图形用户界面。界面需要简洁直观,让用户能够快速查看其数字生活数据。

pip install pyqt5

创建一个简单的窗口界面

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()

        self.setWindowTitle('智能应用时长统计工具')
        self.setGeometry(300, 300, 600, 400)
        
        self.layout = QVBoxLayout()

        self.label = QLabel('欢迎使用数字生活分析师!', self)
        self.layout.addWidget(self.label)

        self.setLayout(self.layout)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

这段代码展示了如何使用 PyQt5 创建一个简单的窗口,并在其中放置一个文本标签。

2. 记录应用使用时长

2.1 获取系统进程信息

为了能够准确地记录应用使用时长,我们需要获取系统当前正在运行的应用程序。我们可以利用 Python 的 psutil 库来实现这一功能。

pip install psutil

通过 psutil 获取系统进程并记录哪些应用在后台运行:

import psutil

def get_running_apps():
    running_apps = []
    for process in psutil.process_iter(['pid', 'name', 'create_time']):
        try:
            app = process.info
            running_apps.append(app)
        except psutil.NoSuchProcess:
            continue
    return running_apps

# 获取当前运行的应用
apps = get_running_apps()
for app in apps:
    print(f"应用名称: {app['name']}, PID: {app['pid']}, 启动时间: {app['create_time']}")

该代码片段会列出所有正在运行的进程及其相关信息。接下来,我们需要将这些数据与具体的应用时长进行匹配。

2.2 记录应用时长

为了记录应用的使用时长,我们需要定期查询系统的进程,并记录每个应用启动的时间和结束的时间。使用 SQLite 数据库存储应用时长信息。

pip install sqlite3

创建一个 SQLite 数据库来存储时长数据

import sqlite3
from datetime import datetime

# 连接到 SQLite 数据库(如果没有则会创建)
conn = sqlite3.connect('app_usage.db')
cursor = conn.cursor()

# 创建表格
cursor.execute('''CREATE TABLE IF NOT EXISTS app_usage
                (app_name TEXT, start_time TEXT, end_time TEXT)''')

def record_app_usage(app_name, start_time, end_time):
    cursor.execute('INSERT INTO app_usage (app_name, start_time, end_time) VALUES (?, ?, ?)',
                   (app_name, start_time, end_time))
    conn.commit()

# 示例:记录一个应用的使用时长
record_app_usage("Chrome", "2025-07-04 09:00:00", "2025-07-04 09:30:00")

# 查询记录
cursor.execute('SELECT * FROM app_usage')
print(cursor.fetchall())

conn.close()

3. 时长统计与分析

通过 SQLite 数据库,我们能够存储所有应用的使用记录。接下来,通过对这些数据进行分析,我们可以给出应用的使用时长统计。

例如,按日期、应用类别进行分组统计:

def get_usage_statistics():
    cursor.execute('''SELECT app_name, SUM(strftime('%s', end_time) - strftime('%s', start_time)) AS total_seconds
                      FROM app_usage
                      GROUP BY app_name''')
    result = cursor.fetchall()
    for app, total_seconds in result:
        print(f"{app} 使用总时长: {total_seconds // 60} 分钟")

4. 数据可视化与图表展示

使用 Matplotlib 和 PyQt 集成数据可视化,让用户能够更直观地查看应用的使用时长。我们可以通过条形图、饼图等形式展示不同应用的使用比例。

pip install matplotlib

示例:绘制应用时长的饼图

import matplotlib.pyplot as plt

# 假设已有应用使用时长数据
apps = ['Chrome', 'Slack', 'Visual Studio Code']
time_spent = [120, 90, 150]

plt.pie(time_spent, labels=apps, autopct='%1.1f%%', startangle=90)
plt.title('应用使用时长统计')
plt.show()

将 Matplotlib 与 PyQt 结合,实现数据可视化展示:

from PyQt5.QtWidgets import QVBoxLayout, QGraphicsView, QGraphicsScene
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('智能应用时长统计工具')
        self.setGeometry(300, 300, 800, 600)
        
        self.layout = QVBoxLayout()

        # 创建图形视图容器
        self.canvas = FigureCanvas(plt.figure())
        self.layout.addWidget(self.canvas)

        self.setLayout(self.layout)
        self.plot_usage()

    def plot_usage(self):
        apps = ['Chrome', 'Slack', 'Visual Studio Code']
        time_spent = [120, 90, 150]

        ax = self.canvas.figure.add_subplot(111)
        ax.pie(time_spent, labels=apps, autopct='%1.1f%%', startangle=90)
        ax.set_title('应用使用时长统计')

        self.canvas.draw()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

5. 通知与提醒

为了帮助用户更好地管理应用使用时长,我们可以在一定的时长后提供提醒功能。例如,当用户连续使用某个应用超过一定时间后,给出弹窗提醒。

from PyQt5.QtWidgets import QMessageBox

def show_usage_warning(app_name):
    msg = QMessageBox()
    msg.setIcon(QMessageBox.Warning)
    msg.setText(f"你已经连续使用 {app_name} 超过 2 小时,请注意休息!")
    msg.setWindowTitle("应用时长提醒")
    msg.exec_()

6. 打包与发布

开发完成后,我们可以使用 PyInstaller 或 cx_Freeze 将应用打包成可执行文件,发布给用户:

pip install pyinstaller
pyinstaller --onefile app.py

总结

本文展示了如何利用 Python + Qt 打造一个智能应用时长统计工具,帮助用户了解自己在不同应用上的时间分布。通过定期记录应用使用时长、时长统计、数据可视化、通知提醒等功能,用户能够更好地管理自己的数字生活。借助开源工具,Python和Qt为我们提供了强大而灵活的开发能力,使得这种工具的实现变得更加轻松和高效。