栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Tkinter键盘敲击监听小工具

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Tkinter键盘敲击监听小工具

Tkinter键盘敲击监听小工具 1. 用到的库
tkinter # Python自带的GUI库
pynput # 具有键盘监听和控制功能的库
threading.Timer # 用来计时,实现每天凌晨更新监听结果
2. 代码
from pynput import keyboard
from datetime import datetime, timedelta
import tkinter as tk
from threading import Timer

class MyGUI():
    def __init__(self):
        # 初始化GUI
        self.init_gui()
        # 开启键盘监听
        self.start_keyboard_listen()
        # 开启Timer计时器
        self.set_timer()
        # 记录开启时间
        self.log('程序已开启!')

    def init_gui(self):
        # 初始化GUI窗口
        self.root = tk.Tk()
        # 设置窗口名称
        self.root.title('键盘监听')
        # 设置窗口大小和位置 长x宽+左边距+上边距
        self.root.geometry('200x120+1100+20')
        # 设置窗口左右不允许伸缩,左右可以伸缩
        self.root.resizable(False, True)
        # 设置窗口置于顶部
        # self.root.wm_attributes('-topmost', 1)
        # 设置敲键盘数起始数为0
        self.times = 0
        # 设置Lable标签文本为StringVar,以及初始化
        self.times_var = tk.StringVar()
        self.times_var.set(f'今日已敲击键盘{self.times}次')
        # 创建一个标签lb
        self.lb = tk.Label(self.root,
                           textvariable=self.times_var,
                           bg='DarkRed',
                           fg='Snow',
                           width=24,
                           font=('宋体', 12),
                           relief='ridge'
                           )
        self.lb.pack()
        # 设置一个Text文本框
        self.text = tk.Text(self.root, width=30, height=100, bg='white')
        self.text.pack()
        self.text.configure(state='disable')
        self.text_insert('程序启动!')

    def now(self):
        return datetime.now().strftime('%Y-%m-%d %H:%M:%S')

    def log(self, record:str):
        with open('record.txt', 'a') as f:
            f.write(self.now()+'n')
            f.write(record+'nn')

    def text_insert(self, content):
        self.text.configure(state='normal')
        self.text.insert('insert', self.now() + 'n')
        self.text.insert('insert', content+'n')
        self.text.configure(state='disable')

    # 初始化Timer计时器
    def set_timer(self):
        # 开启程序时间
        now_time = datetime.now()
        # 第二天同一时间
        now_tom = now_time + timedelta(days=+1)
        # 第二天凌晨时间
        next_time = datetime.strptime(str(now_tom.year)+"-"+str(now_tom.month)+"-"+str(now_tom.day)+" 00:00:00", "%Y-%m-%d %H:%M:%S")
        # 现在到明天凌晨总秒数
        time_to_tomorrow = (next_time - now_time).total_seconds()
        # 开启一个计时器
        self.timer = Timer(time_to_tomorrow, self.timer_task)
        self.timer.start()

    # 计时任务, 运用了递归,最终会溢出
    def timer_task(self):
        # 当前时间
        now = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        # 在text中写入今天的记录
        self.text_insert(f'今天您一共敲击键盘{self.times}次!')
        # 在txt文件中写入记录
        self.log(f'今天您一共敲击键盘{self.times}次!')
        # 重置敲击键盘总数
        self.times = 0
        self.times_var.set(f'今天您一共敲击键盘{self.times}次n')
        # 开启新的计时器
        self.timer = Timer(86400, self.timer_task)
        self.timer.start()

    # 按下键盘事件
    def on_press(self, key):
        # 返回False之后监听终止
        if key == keyboard.Key.end:
            print(f'截至目前您已敲击键盘{self.times}次!nn终止程序……')
            self.shutdown()


    # 松开键盘事件
    def on_release(self, key):
        # 每松开一次键盘,记录一次敲击
        self.times += 1
        self.times_var.set(f'今日已敲击键盘{self.times}次')

    # 键盘监听
    def start_keyboard_listen(self):
        self.keys = []
        self.listener = keyboard.Listener(
            on_press=self.on_press,
            on_release=self.on_release)
        self.listener.start()

    def shutdown(self):
        self.log(f'程序已终止,今日已记录敲击键盘{self.times}次!')
        self.timer.cancel()
        print('计时器已经终止!')
        self.listener.stop()
        print('键盘监听已经终止!')
        print('窗口已关闭')
        self.root.destroy()


if __name__ == '__main__':
    GUI = MyGUI()
    root = GUI.root
    # 删除最小化/最大化,将窗口显示成工具栏的形式
    root.attributes('-toolwindow',True)
    # 设置白色为透明色
    root.wm_attributes('-transparentcolor','white')
    # 设置窗口图标
    # root.iconbitmap('键盘.ico')
    # 设置关闭窗口前进行的操作
    root.protocol('WM_DELETE_WINDOW', GUI.shutdown)
    print('如要终止程序,请敲击"END"键……')
    root.mainloop()
3. pyinstaller打包成exe文件
# -F表示生成单个可执行文件,-w表示不显示dos窗口
pyinstaller -F -i keyboard.ico -w keys.py
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/998349.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号