学习网站来自大佬发的。csdn用Python的tkinter制作鼠标模拟点击器_searching learner的博客-CSDN博客_python随机点击鼠标
import tkinter as tk import random import pyautogui as mouse from tkinter.messagebox import * interval_time=2 #点击时间间隔 (定时点击) number_of_clicks=1#单次点击次数(多次点击同一位置) target_quantity=1 #点击位置坐标数(点击不同的位置) windows=tk.Tk() #定义窗体,初始化 var=tk.StringVar("")#定义标签文字,以后用于调用 #刷新标签内容var.set(str)刷新标签内容 width=400 #定义窗体的宽和 height=400 #高,400*400个像素点(注:窗体#宽高尚未设置在这里) windows.title("自动点击器") #窗体名称 x=windows.winfo_screenwidth() #x和y用于获取显示器的宽度和高度, y=windows.winfo_screenheight()#主要用途是计算上述声明 #的windows窗体放在屏幕中间 mouse_position=定义并初始化一个链表,存储固定鼠标的位置 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 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()#刷新当前设置的内容信息 #功能函数,设置单次点击次数 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()) #功能函数,设置点击范围 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_imes))
var.set(information())
### 主函数 ####
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_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='1000次',command=lambda :set_number_of_clicks(1000))
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库做一个鼠标模拟点击器_searching learner的博客-CSDN博客_python鼠标随机点击
如有侵权私信联系,我只是转载者。