python使用keyboard库写的GUI键盘宏

2023-11-15

前言:之前和朋友玩游戏,需要一直按住两个按键,很麻烦。就像用python写个小脚本来方便自己,说干就干。(用于学习)

正文:
用到的库:

  1. keyborad
  2. threading
  3. tkinter
  4. time

分析:由于需要监听键盘与运行可视化界面,所以要用的python的多线程模块:threading。

线程:

  1. 监听键盘,是否运行/停止键盘宏。
  2. GUI界面线程。
  3. 键盘宏运行线程。

一,编写:
利用tkinter模块构造前端:

class GUI(threading.Thread):   #从threading.Thread中继承一个新的子类
    def __init__(self):
        threading.Thread.__init__(self)
        global text_list
        text_list = []
    def run(self):
        global d,f,h23
        windows = tk.Tk()
        windows.title = '键盘精灵'
        windows.geometry('500x500')
        a = tk.Label(windows, text='请按照你需要键盘顺序,按下键盘按键:\n例如:你需要让键盘循环输入:”Q“+"W"+"E"+"R"\n在下面右边的输入框输入:qwer\n开始热键为e,停止热键为t', bg='white',
                     font=('Arial', 12), width=40, heigh=5)
        a.pack(side='top', expand='no', fill='x')
        c1 = tk.Button(windows, text='任意位置插入', bg='white', font=('Arial', 12), width=20, heigh=1, command=self.insert)
        c2 = tk.Button(windows, text='末尾位置插入', bg='white', font=('Arial', 12), width=20, heigh=1, command=self.end)
        c3 = tk.Button(windows, text='清空', bg='white', font=('Arial', 12), width=20, heigh=1, command=self.clear)
        c4 = tk.Button(windows, text='确定', bg='white', font=('Arial', 12), width=20, heigh=1, command=self.ok)
        f = tk.Text(width='40', heigh='1')
        f.pack(side='left', expand='yes', fill='both', anchor='w')
        d = tk.Entry(windows, show=None, width=50, font=('Arial', 30))
        d.pack(side='top', expand='yes', fill='both', anchor='n')
        c1.pack(side='top', expand='yes', fill='both')
        c2.pack(side='top', expand='yes', fill='both')
        c3.pack(side='top', expand='yes', fill='both')
        c4.pack(side='top', expand='yes', fill='both')
        windows.mainloop()

    def insert(self):
        global d, f
        var = d.get()
        f.insert('insert', var)

    def end(self):
        global d, f
        var = d.get()
        f.insert('end', var)

    def clear(self):
        global d, f
        f.delete(0.0, 'end')

    def ok(self):
        global d, f
        h = f.get(0.0, 'end')
        text_list.extend(h)

然后就是编写后台的程序了:

#下面这个类是用于储存从前端获得的数据,并处理,方便下面程序利用
class judge(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        global list
        list = []
        pass
    def run(self):
        while True:
            global text_list
            a = text_list
            if len(a) > 0:
                if a != list:
                    list.clear()
                    list.extend(a)
                elif a==list:
                    text_list.clear()
            elif len(a) == 0:
                time.sleep(1)
                pass
#这个类是用于监听键盘的‘e’键,看是否开始运行键盘宏;
class LISTEN(threading.Thread):  
    def __init__(self):
        threading.Thread.__init__(self)
    def run(self):
        while True:
            keyboard.wait('e')
            LISTEN.QW(self)
    #下面这个函数,用于循环发送特定的按键,实现键盘宏;
    def QW(self):
        global n
        while True:
            for i in list:
                keyboard.send(i)
                time.sleep(0.1)
                # keyboard.send('w')
                # time.sleep(0.1)
                if n == 1:
                    break
            if n == 1:
                n = 0
                break
#下面这个类是用来监听键盘,用户是否按下“t”键来退出键盘循环;
class LISTEN_EXIT(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
    def run(self):
        global n
        while True:
            keyboard.wait('t')
            n = 1

最后就是将各个类,实例化运行:

if __name__ == '__main__':
    gui = GUI()
    JU = judge()
    listen = LISTEN()
    listen_exit = LISTEN_EXIT()
    gui.start()
    JU.start()
    listen.start()
    listen_exit.start()
    gui.join()
    JU.join()
    listen.join()
    listen_exit.join()

程序写的不是很好,有很多地方啰嗦或重复的地方,之后会不断完善。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python使用keyboard库写的GUI键盘宏 的相关文章

随机推荐

  • 图像识别-YOLO V8安装部署-window-CPU-Pycharm

    前言 安装过程中发现 YOLO V8一直在更新 现在是2023 9 20的版本 已经和1月份刚发布的不一样了 eg 目录已经变了 旧版预测 在ultralytics yolo v8 下detect 新版 ultralytics models
  • 目前国内电子地图产业链

    目前国内电子地图产业链 从最上游开始依次共有数据类 软件类 互联网及移动互联网服务类3大环节 细分4大链条 转播到腾讯微博 其中 第一环节和第三个环节 都需要牌照 第一环节中的地图数据采集商 如高德 四维获得行业甲级牌照后 方能具备从事采集
  • markdown自动生成导航目录

    把这一段代码插入到markdown生成的HTML文件的head标签中 将会自动根据markdown的标题按级别生成导航目录
  • 可能是Windows下最简单的Java环境安装指南

    1 简介 JDK Java SE Development Kit Java开发工具 JRE Java Runtime Environment Java运行环境 如果要从事Java编程 则需要安装JDK 如果仅仅是运行一款Java程序则JRE
  • Keycloak配置模拟用户登录

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 一 keycloak配置 一 keycloak配置 keycloak启动 winodws通过配置项启动keycloak 进入keycloak安装目录keycloak
  • 基于Qt的OpenGL编程(3.x以上GLSL可编程管线版)---(二十四)高级GLSL技巧

    Vries的教程是我看过的最好的可编程管线OpenGL教程 没有之一 其原地址如下 https learnopengl cn github io 04 20Advanced 20OpenGL 08 20Advanced 20GLSL 关于高
  • OLED\OLED.axf: Error: L6200E: Symbol __asm___6_oled_c_F16x16____REV16 multiply defined (by oled_1.o

    关于这个问题的解决我当时找了很久不知道该如何解决它总说重复最后发现应该是当时在别的文件夹引入的时候重复了 选择Remove Group然后重新编译 就ok了
  • 迁移学习(transfer learning)和微调(fine-tune)的几点认识

    迁移学习和微调的区别 什么是迁移学习 即一种学习对另一种学习的影响 它广泛地存在于知识 技能 态度和行为规范的学习中 任何一种学习都要受到学习者已有知识经验 技能 态度等的影响 只要有学习 就有迁移 迁移是学习的继续和巩固 又是提高和深化学
  • java实现多图片或多图片上传

    文章目录 一 单图上传 步骤 前台页面 后台实现文件上传的操作 二 多图上传 多图上传 还需要多一些步骤 适用功能 一 单图上传 步骤 前台页面 1 文件样式世界 div class layui input block img src al
  • Vue【四】vue自定义指令。

    Vue 四 vue自定义指令 文章目录 Vue 四 vue自定义指令 TOC 文章目录 前言 一 自定义指令 局部注册 二 自定义指令 全局注册 三 自定义指令 指令的值 总结 前言 除了核心功能默认内置的指令 v model 和 v sh
  • 查询SQL表占用空间(sp_spaceused 表名)

    create table tablespaceinfo 狦 nameinfo varchar 50 rowsinfo int reserved varchar 20 datainfo varchar 20 index size varcha
  • 保定2021高考学校成绩查询,2021年保定高考成绩排名及成绩公布时间什么时候出来...

    保定高考结束后 每年都有很多家长和考试不知道保定高考成绩排名如何查询 保定高考成绩什么时候公布以及查询方式 本文小编整理了保定高考成绩查询排名的相关知识 一 保定高考成绩公布时间及查询方式 根据往年保定高考成绩公布时间预测 2021年保定高
  • 小程序授权微信登录,获取微信用户名,头像,登录code

    getUserProfile e var that this wx getUserProfile desc 用于完善会员资料 success res gt if res 用户名 res userInfo nickName 头像res use
  • 【BERT类预训练模型整理】

    BERT类预训练模型整理 1 BERT的相关内容 1 1 BERT的预训练技术 1 1 1 掩码机制 1 1 2 NSP Next Sentence Prediction 1 2 BERT模型的局限性 2 RoBERTa的相关内容 2 1
  • 小程序(二十三)微信小程序左上角返回按钮触发事件

    微信并没有为我们提供左上角返回上一页触发的事件 但是有的时候这个操作我们还是需要监听一下 下图红框标注的返回上一页按钮 最后实现的效果 点击返回上一页的时候 我需要重新加载上一页的数据 返回上一页按钮只会触发上一页的onShow生命周期函数
  • 怎么将本地文件上传到远程git仓库

    怎么将本地文件上传到远程git仓库 1 先进入项目文件夹 通过命令 git init 把这个目录变成git可以管理的仓库 git init 2 把文件添加到版本库中 使用命令 git add 添加到暂存区里面去 不要忘记后面的小数点 意为添
  • 第二篇:UE4如何动态修改物体材质

    1 找到需要替换材质的物体 可以看到下方所有的材质 它是一个数组 前面是材质的下标 2 打开关卡蓝图 编写如下蓝图 第一步获取所有材质 创建动态材质接口 第二部设置材质 element Index代表要替换的材质下标 Material代表要
  • 米米商城项目

    米米商城 1 开发环境 2 项目功能 3 项目搭建步骤 4 配置文件 4 1 pom xml 4 2 jdbc properties 4 3 Mybaties配置文件 SqlMapConfig xml 4 4 Spring配置文件 4 4
  • 15.Mybatis 更新操作-update

    1 update 标签 update 标签是用于定义更新 语句的 1 1 常用属性 update 有几个常用的属性 但是通常只需要设置id 即可 id sql 片段在命名空间内的唯一标识 和mapper 中方法名保持一致 parameter
  • python使用keyboard库写的GUI键盘宏

    前言 之前和朋友玩游戏 需要一直按住两个按键 很麻烦 就像用python写个小脚本来方便自己 说干就干 用于学习 正文 用到的库 keyborad threading tkinter time 分析 由于需要监听键盘与运行可视化界面 所以要