iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >怎么在Python中利用tkinter库实现投放鼠标模拟点击器
  • 285
分享到

怎么在Python中利用tkinter库实现投放鼠标模拟点击器

2023-06-14 20:06:28 285人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

本篇文章为大家展示了怎么在python中利用tkinter库实现投放鼠标模拟点击器,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等

本篇文章为大家展示了怎么在python中利用tkinter库实现投放鼠标模拟点击器,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

Python的优点有哪些

1、简单易用,与C/C++、Java、C# 等传统语言相比,Python对代码格式的要求没有那么严格;2、Python属于开源的,所有人都可以看到源代码,并且可以被移植在许多平台上使用;3、Python面向对象,能够支持面向过程编程,也支持面向对象编程;4、Python是一种解释性语言,Python写的程序不需要编译成二进制代码,可以直接从源代码运行程序;5、Python功能强大,拥有的模块众多,基本能够实现所有的常见功能。

用Python做一个鼠标模拟点击器,可以实现多位置,定时,定次数,定区域随机位置点击,对于一些比较肝的游戏(痒痒鼠之类的),挂机非常有帮助,解放双手;定区域随机点击可以一定程度上防止系统检测出有使用脚本开挂的行为

import tkinter as tkimport randomimport pyautogui as mousefrom tkinter.messagebox import *

安装库

首先是今天要用到的几个必要的库:tkinter,random,pyautogui

没有安装tkinter库和pyautogui库可以按照一下操作:

打开CMD控制台,依次输入:

pip install -i https://pypi.mirrors.ustc.edu.cn/simple/ tkinter

pip install -i Https://pypi.mirrors.ustc.edu.cn/simple/ pyautogui

在线安装,由于是使用的镜像源,应该下载比较快

interval_time=2 #点击时间间隔 (定时点击)number_of_clicks=1#单次点击次数(多次点击同一位置)target_quantity=1 #点击位置坐标数(点击不同的位置)windows=tk.Tk() #定义一个窗体,初始化var=tk.StringVar("")#定义一个标签文字,用于后面通过调用                               #刷新标签内容var.set(str)刷新标签内容

完整代码

注意这两行代码顺序:

windows=tk.Tk() #定义一个窗体,初始化

var=tk.StringVar("")#定义一个可变标签文字,用于后面通过调用

#var.set(str)刷新标签内容(str为一个字符串)

若在窗体初始化之前定义var,后面在调用var.set(str)时,程序会报错,无法通过编译,错误的大致含义就是var未初始化

width=400                     #定义窗体的宽和height=400                    #高,400*400个像素点(注:这里还未设置窗体#宽高)windows.title("自动点击器")    #窗体名称x=windows.winfo_screenwidth() #x和y用于获取显示器的宽和高,y=windows.winfo_screenheight()#主要用途是:通过计算把上面声明                              #的windows窗体放到屏幕中间

windows.winfo_screenwidth()和windows.winfo_screenheight()函数返回显示器宽和高(int 型)

windows.geometry("%dx%d+%d+%d" % (width, height, (x-width)/2,(y-height)/2)) #设置窗体宽高和位置

windows.geometry()函数一共四个参数,从左到右依次含义为:窗体宽,窗体高,窗体位置坐标x,窗体位置坐标y

windows.maxsize(width,height)  #约束窗体最大尺寸和最小尺寸相同,windows.minsize(width,height)   #达到目的窗体大小不可变

windows.maxsize(width,height) 和 windows.minsize(width,height) 依次含义为:约束窗体的最大尺寸和最小尺寸

mouse_position=[[0,0]]#定义并初始化一个链表,用于存储固定下来的鼠标的位置mouse_position.clear()#将链表清空(清空初始化时的元素[0,0])total_number_of_times=100#定义最大点击次数start_set=False#定义一个标志,用于判断是否已经开始自动点击click_range=1#定义点击范围(以当前鼠标坐标为中心,展开的边长为2倍click_range的平面正方形区域)单位为像素点
#函数infORMation()返回一个字符串,包含当前设置状态的信息def information():    k="%s%d%s%d%s%d%s%d%s%d%s"%("目标数:",target_quantity,"个  单次点击数:",number_of_clicks,"次\n点击时间间隔:",interval_time,"s  次数总上限度:",total_number_of_times,"次\n点击范围:",click_range,"像素点")    return k

注:形如("%s%d%s"%(str1,int1,str2))的变量实际上的目的是将字符串str1,str2和整型变量int1合并成一个字符串,后面还会有大量这样的使用

var.set(information())#刷新标签内容var
#用于设定一个点击位置的鼠标坐标def set_one_mouse_position(event):    global  mouse_position#引用全局变量mouse_position    #做出判断,是否设置的鼠标坐标已经达到了设定的最大值,若未达到最大值,添#加鼠标坐标到mouse_position链表    if start_set==True and len(mouse_position)<target_quantity:         x=mouse.position().x#获取当前鼠标位置的x坐标         y=mouse.position().y#获取当前鼠标位置的y坐标         ##对于设定的鼠标位置做出判断,是否可能在叠加点击范围的属性上会超出屏幕范围,并在设置后给出提醒或者警告         if x-click_range<0 or y-click_range<0:         #鼠标位置可能超出屏幕范围,给出警告              showwarning(title='警告', message="%s%d%s%d%s"%('当前位置(',x,',',y,')\n可能会出现:自动点击时鼠标不在桌面'))         mouse_position.append([x,y])         showinfo(title='提示', message=("%s%d%s"%("位置",len(mouse_position),'设置成功')))    var.set(information())#刷新当前设置内容信息

注:

①showinfo(title=‘提示', message=("%s%d%s"%(“置”,len(mouse_position),‘设置成功')))
以对话框的形式弹出,给用户提示,title(字符串)是对话框名字,message(字符串)是对话框文字内容

② showwarning(title=‘警告', message="%s%d%s%d%s"%(‘当前位置(',x,',',y,')\n可能会出现:自动点击时鼠标不在桌面'))
以对话框的形式弹出,给用户警告

③关键字global,将已经声明的变量前加上global再次声明的作用是:在当前函数内部对其值做出修改,并且函数返沪或结束时,其被改变的值不会恢复,(类似与c++的引用),
后面还有诸多函数内部用到global关键字

④mouse.position()返回的是一个二元组,即当前鼠标的坐标(x,y)

#功能函数,用于设置单次点击的次数def set_number_of_clicks(num):    global number_of_clicks    number_of_clicks=num    var.set(information())
#功能函数,用于设置点击的时间间隔def set_interval_time(time):   global interval_time   interval_time=time   var.set(information())
#功能函数,用于设置点击位置的数量def set_target_quantity(num):    global target_quantity    target_quantity=num    var.set(information())
#功能函数,开始自动点击def start_setting_coordinates():         global start_set,mouse_position,windows         #当start_set==False并且mouse_position链表当中的元素个数还未达到最大值时,继续固定鼠标坐标         if  start_set==False and len(mouse_position)<target_quantity:             start_set=True             showinfo(title='提示', message="%s%d%s"%('开始设置鼠标坐标\n一共需要设置',target_quantity,"个位置"))         #当start_set==True并且mouse_position链表当中的元素个数达到最大值时,开始自动点击         elif start_set==True and len(mouse_position)>=target_quantity:             showinfo(title='提示', message='鼠标位置设置完毕,开始自动点击')             nim=0             while nim<total_number_of_times:                  for i in range(len(mouse_position)):                  #以鼠标准确位置为中心的正方形内随机选取点击位置坐标                      mX=random.randint(mouse_position[i][0]-click_range,mouse_position[i][0]+click_range)                      mY=random.randint(mouse_position[i][1]-click_range,mouse_position[i][1]+click_range) #模拟点击鼠标                     mouse.click(mX,mY,button='left',clicks=number_of_clicks,interval=interval_time) #模拟移动鼠标                      mouse.moveTo(mX,mY)                  nim=nim+1             showinfo(title='提示', message="%s%d%s"%('点击次数达到上限',total_number_of_times,'点击结束'))             #点击次数达到最大次数,点击结束,清空鼠标位置链表内容,改变标志变量和当前设置信息             mouse_position.clear()             start_set=False         var.set(information())

注:

mouse.click(mX,mY,button=‘left',clicks=number_of_clicks,interval=interval_time)

模拟鼠标在坐标(mX,mY)出点击,button指示点击左键还是右键,clicks指示点击次数,interval指示点击的时间间隔

mouse.moveTo(mX,mY)
移动鼠标到指定位置坐标(mX,mY)

#功能函数,设置点击范围def start_setting_click_range(rangs):     global click_range     ti=rangs.get()#获取rangs为本框的内容(字符串)     #对于输入的内容进行差错处理     #当字符串为空时,设置点击范围click_range为0     if len(ti)==0:         click_range=0         showwarning(title='警告', message='输入内容为空,当前范围为默认值:0')         return        #当字符串不为空时,检查每一个字符是否为数字的ascall码     for j in range(len(ti)):         if ti[j]>'9' or ti[j]<'0':             showerror(title='错误', message="%s%s%s"%('输入内容:\n',ti,'\n当中含有非法字符'))             return      #将通过上方检验的只含数字ascall码的字符串转化为整数,若整数大于0,则更新点击范围为该值     ti=int(ti)     if ti>0:         click_range=ti         showinfo(title='提示', message="%s%d"%('设置成功,点击范围为:',click_range))     var.set(information())

注:对于文本框内容的获取,需要绑定按钮,通过在按钮点击功能函数当中获取,直接获取无法取得

#功能函数,设置点击总次数def start_setting_click_times(times):     global total_number_of_times     ti=times.get()     if len(ti)==0:         total_number_of_times=100         showwarning(title='警告', message='输入内容为空,当前点击总次数为默认值:100')         return     for j in range(len(ti)):         if ti[j]>'9' or ti[j]<'0':             showerror(title='错误', message="%s%s%s"%('输入内容:\n',ti,'\n当中含有非法字符'))             return     ti=int(ti)     if ti>0:         total_number_of_times=ti         showinfo(title='提示', message="%s%d"%('设置成功,点击总次数为:',total_number_of_times))     var.set(information())

start_setting_click_times(times)对于输入文本框的内容查错处理和上一个函数相同,不再做介绍

###                              主函数                 ####def main():#初始化设置总菜单条,将菜单放在windows窗体上   menu_slect_num=tk.Menu(windows)#声明第一个下拉单选菜单,将其放在总菜单条上   file_menu1=tk.Menu(menu_slect_num,tearoff=0)#设置第一个下拉菜单的菜单封面(封面标签)   menu_slect_num.add_cascade(label='目标数',menu=file_menu1)   #添加可选菜单项   file_menu1.add_radiobutton(label='1',command=lambda :set_target_quantity(1))#设置菜单项的标签,绑定功能   file_menu1.add_separator()#添加菜单项之间的分割线   ##后面继续添加菜单项,绑定功能   file_menu1.add_radiobutton(label='2',command=lambda :set_target_quantity(2))   file_menu1.add_separator()   file_menu1.add_radiobutton(label='3',command=lambda :set_target_quantity(3))   file_menu1.add_separator()   file_menu1.add_radiobutton(label='4',command=lambda :set_target_quantity(4))   file_menu1.add_separator()   file_menu1.add_radiobutton(label='5',command=lambda :set_target_quantity(5))

注:

file_menu1.add_radiobutton(label=‘1',command=lambda :set_target_quantity(1))#设置菜单项的标签,绑定功能
command指的是功能函数,只能将无参函数直接用函数名赋值给command, 对于有参函数,需要以:command=lambda :有参函数(形参1,形参2…) 的形式赋值给command,不然无法正常触发功能函数

#创建第二个下拉单选菜单,与第一个操作一样   file_menu2=tk.Menu(menu_slect_num,tearoff=0)   menu_slect_num.add_cascade(label='时间间隔',menu=file_menu2)   file_menu2.add_radiobutton(label='0.01s',command=lambda :set_interval_time(0.01))   file_menu2.add_separator()   file_menu2.add_radiobutton(label='0.05s',command=lambda :set_interval_time(0.05))   file_menu2.add_separator()   file_menu2.add_radiobutton(label='0.1s',command=lambda :set_interval_time(0.1))   file_menu2.add_separator()   file_menu2.add_radiobutton(label='0.5s',command=lambda :set_interval_time(0.5))   file_menu2.add_separator()   file_menu2.add_radiobutton(label='1s',command=lambda :set_interval_time(1))   file_menu2.add_separator()   file_menu2.add_radiobutton(label='2s',command=lambda :set_interval_time(2))   file_menu2.add_separator()   file_menu2.add_radiobutton(label='5s',command=lambda :set_interval_time(5))   file_menu2.add_separator()   file_menu2.add_radiobutton(label='10s',command=lambda :set_interval_time(10))
#创建第三个下拉单选菜单,绑定功能,和上面的操作一样     file_menu3=tk.Menu(menu_slect_num,tearoff=0)     menu_slect_num.add_cascade(label='单次点击数',menu=file_menu3)     file_menu3.add_radiobutton(label='1次',command=lambda :set_number_of_clicks(1))     file_menu3.add_separator()     file_menu3.add_radiobutton(label='2次',command=lambda :set_number_of_clicks(2))     file_menu3.add_separator()     file_menu3.add_radiobutton(label='3次',command=lambda :set_number_of_clicks(3))     file_menu3.add_separator()     file_menu3.add_radiobutton(label='4次',command=lambda :set_number_of_clicks(4))     file_menu3.add_separator()     file_menu3.add_radiobutton(label='5次',command=lambda :set_number_of_clicks(5))
 windows.config(menu=menu_slect_num)#将菜单添加到窗体上     #添加标签和按钮     #定义标签对象,设置目标窗体,标签文本(text),背景颜色(bg),前景颜色(fg),字体(font),以及宽(width),高(height)     lb1=tk.Label(windows,text="按Shift-A固定鼠标或者退出自动点击",bg='black', fg='white', font=('Arial',12), width=40, height=2)     lb2=tk.Label(windows,text="设置点击范围(像素点,默认为0):\n(以设置的鼠标坐标为中心展开)",bg='black', fg='white', font=('Arial', 12), width=40, height=2)     lb3=tk.Label(windows,text="总点击次数(默认为100):",bg='black', fg='white', font=('Arial', 12), width=40, height=2)     lb4=tk.Label(windows,textvariable=var,bg='green', fg='black', font=('Arial',12), width=40, height=3)
#定义按钮对象,设置按钮名称,绑定功能函数             b1=tk.Button(windows,text="first_click",command=start_setting_coordinates)     rang=tk.Entry(windows,show=None,font=('Arial', 14))     b2=tk.Button(windows,text="second_click",command=lambda :start_setting_click_range(rang))     b3=tk.Button(windows,text="third_click",command=lambda :start_setting_click_times(timi))     #定义文本框,指定目标窗体,设置输入的文本为可见(show=None),设置文本字体font     timi=tk.Entry(windows,show=None,font=('Arial', 14))           #放置按钮和标签     lb4.pack()     lb1.pack()     b1.pack()     lb2.pack()     rang.pack()     b2.pack()     lb3.pack()     timi.pack()     b3.pack()
#为窗体绑定键盘监听器,当按下组合键(Shift-A),触发功能函数set_one_mouse_position    windows.bind("<Shift-A>",set_one_mouse_position)    windows.mainloop()#使窗体内容不断刷新
main()

效果图

怎么在Python中利用tkinter库实现投放鼠标模拟点击器
怎么在Python中利用tkinter库实现投放鼠标模拟点击器
怎么在Python中利用tkinter库实现投放鼠标模拟点击器

上述内容就是怎么在Python中利用tkinter库实现投放鼠标模拟点击器,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网Python频道。

--结束END--

本文标题: 怎么在Python中利用tkinter库实现投放鼠标模拟点击器

本文链接: https://www.lsjlt.com/news/275131.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么在Python中利用tkinter库实现投放鼠标模拟点击器
    本篇文章为大家展示了怎么在Python中利用tkinter库实现投放鼠标模拟点击器,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等...
    99+
    2023-06-14
  • 怎么在pyqt5中利用ComboBox实现一个鼠标点击触发事件
    怎么在pyqt5中利用ComboBox实现一个鼠标点击触发事件?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、自定义MyComboBox# MyComboBox...
    99+
    2023-06-14
  • 怎么在Python中利用tkinter实现一个日期选择器
    这篇文章主要介绍了怎么在Python中利用tkinter实现一个日期选择器,此处通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考价值,需要的朋友可以参考下:首先,定义一个类,叫Calendar# -*- ...
    99+
    2023-06-06
  • 怎么在html5中利用canvas实现一个背景鼠标连线动态效果
    本篇文章为大家展示了怎么在html5中利用canvas实现一个背景鼠标连线动态效果,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。<!doctype html><html&...
    99+
    2023-06-09
  • 怎么在python中利用第三方模块实现连接
    怎么在python中利用第三方模块实现连接?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型)、...
    99+
    2023-06-14
  • 怎么在Android中利用SeekBar实现音乐播放器功能
    怎么在Android中利用SeekBar实现音乐播放器功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一.Demo简介 利用AIDL为Activity绑定服务,...
    99+
    2023-05-31
    android seekbar roi
  • 怎么在Android应用中利用 scrollToTop实现一个点击回到顶部功能
    本篇文章给大家分享的是有关怎么在Android应用中利用 scrollToTop实现一个点击回到顶部功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。实现方法布局代码:<...
    99+
    2023-05-31
    android scrolltotop roi
  • 怎么在python中利用生成器实现协程
    这篇文章给大家介绍怎么在python中利用生成器实现协程,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和面向对象的脚本语言,其最初的设计是用于...
    99+
    2023-06-14
  • 怎么在Python中利用 Asyncio模块实现一个生产消费者模型
    本文章向大家介绍怎么在Python中利用 Asyncio模块实现一个生产消费者模型的基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。Python主要用来做什么Python主要应用于:1、Web开发;2、数...
    99+
    2023-06-06
  • 怎么在python中利用递归实现一个爬虫解析器
    怎么在python中利用递归实现一个爬虫解析器?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。另外一种是配置文件预先告知的方式,你配置成什么类型,解析器就通过对应的解析规则去解析...
    99+
    2023-06-14
  • 怎么在python中利用机器学习实现预测股票交易信号
    本篇文章给大家分享的是有关怎么在python中利用机器学习实现预测股票交易信号,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。数据获取与指标构建先引入需要用到的libraries...
    99+
    2023-06-15
  • 怎么在python中利用后缀表达式实现一个计算器功能
    本文章向大家介绍怎么在python中利用后缀表达式实现一个计算器功能的基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。前缀表达式运算符在数字的前面1 + (2 + 3) * 4 - 5 (中缀)- + 1 * + ...
    99+
    2023-06-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作