濮阳杆衣贸易有限公司

主頁 > 知識庫 > Python實戰(zhàn)之用tkinter庫做一個鼠標模擬點擊器

Python實戰(zhàn)之用tkinter庫做一個鼠標模擬點擊器

熱門標簽:荊州云電銷機器人供應(yīng)商 外呼不封號系統(tǒng) 蘇州電銷機器人十大排行榜 幫人做地圖標注收費算詐騙嗎 江蘇房產(chǎn)電銷機器人廠家 電信營業(yè)廳400電話申請 遼寧400電話辦理多少錢 悟空智電銷機器人6 溫州旅游地圖標注

前言

用Python做一個鼠標模擬點擊器,可以實現(xiàn)多位置,定時,定次數(shù),定區(qū)域隨機位置點擊,對于一些比較肝的游戲(癢癢鼠之類的),掛機非常有幫助,解放雙手;定區(qū)域隨機點擊可以一定程度上防止系統(tǒng)檢測出有使用腳本開掛的行為

import tkinter as tk
import random
import pyautogui as mouse
from 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

在線安裝,由于是使用的鏡像源,應(yīng)該下載比較快

interval_time=2 #點擊時間間隔 (定時點擊)
number_of_clicks=1#單次點擊次數(shù)(多次點擊同一位置)
target_quantity=1 #點擊位置坐標數(shù)(點擊不同的位置)
windows=tk.Tk() #定義一個窗體,初始化
var=tk.StringVar("")#定義一個標簽文字,用于后面通過調(diào)用
                               #刷新標簽內(nèi)容var.set(str)刷新標簽內(nèi)容

完整代碼

注意這兩行代碼順序:

windows=tk.Tk() #定義一個窗體,初始化

var=tk.StringVar("")#定義一個可變標簽文字,用于后面通過調(diào)用

#var.set(str)刷新標簽內(nèi)容(str為一個字符串)

若在窗體初始化之前定義var,后面在調(diào)用var.set(str)時,程序會報錯,無法通過編譯,錯誤的大致含義就是var未初始化

width=400                     #定義窗體的寬和
height=400                    #高,400*400個像素點(注:這里還未設(shè)置窗體#寬高)
windows.title("自動點擊器")    #窗體名稱
x=windows.winfo_screenwidth() #x和y用于獲取顯示器的寬和高,
y=windows.winfo_screenheight()#主要用途是:通過計算把上面聲明
                              #的windows窗體放到屏幕中間

windows.winfo_screenwidth()和windows.winfo_screenheight()函數(shù)返回顯示器寬和高(int 型)

windows.geometry("%dx%d+%d+%d" % (width, height, (x-width)/2,(y-height)/2)) #設(shè)置窗體寬高和位置

windows.geometry()函數(shù)一共四個參數(shù),從左到右依次含義為:窗體寬,窗體高,窗體位置坐標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#定義最大點擊次數(shù)
start_set=False#定義一個標志,用于判斷是否已經(jīng)開始自動點擊
click_range=1#定義點擊范圍(以當前鼠標坐標為中心,展開的邊長為2倍click_range的平面正方形區(qū)域)單位為像素點
#函數(shù)information()返回一個字符串,包含當前設(shè)置狀態(tài)的信息
def information():
    k="%s%d%s%d%s%d%s%d%s%d%s"%("目標數(shù):",target_quantity,"個  單次點擊數(shù):",number_of_clicks,"次\n點擊時間間隔:",interval_time,"s  次數(shù)總上限度:",total_number_of_times,"次\n點擊范圍:",click_range,"像素點")
    return k

注:形如("%s%d%s"%(str1,int1,str2))的變量實際上的目的是將字符串str1,str2和整型變量int1合并成一個字符串,后面還會有大量這樣的使用

var.set(information())#刷新標簽內(nèi)容var
#用于設(shè)定一個點擊位置的鼠標坐標
def set_one_mouse_position(event):
    global  mouse_position#引用全局變量mouse_position
    #做出判斷,是否設(shè)置的鼠標坐標已經(jīng)達到了設(shè)定的最大值,若未達到最大值,添#加鼠標坐標到mouse_position鏈表
    if start_set==True and len(mouse_position)target_quantity:
         x=mouse.position().x#獲取當前鼠標位置的x坐標
         y=mouse.position().y#獲取當前鼠標位置的y坐標
         ##對于設(shè)定的鼠標位置做出判斷,是否可能在疊加點擊范圍的屬性上會超出屏幕范圍,并在設(shè)置后給出提醒或者警告
         if x-click_range0 or y-click_range0:
         #鼠標位置可能超出屏幕范圍,給出警告
              showwarning(title='警告', message="%s%d%s%d%s"%('當前位置(',x,',',y,')\n可能會出現(xiàn):自動點擊時鼠標不在桌面'))
         mouse_position.append([x,y])
         showinfo(title='提示', message=("%s%d%s"%("位置",len(mouse_position),'設(shè)置成功')))
    var.set(information())#刷新當前設(shè)置內(nèi)容信息

注:

①showinfo(title=‘提示', message=("%s%d%s"%(“置”,len(mouse_position),‘設(shè)置成功')))
以對話框的形式彈出,給用戶提示,title(字符串)是對話框名字,message(字符串)是對話框文字內(nèi)容

② showwarning(title=‘警告', message="%s%d%s%d%s"%(‘當前位置(',x,',',y,')\n可能會出現(xiàn):自動點擊時鼠標不在桌面'))
以對話框的形式彈出,給用戶警告

③關(guān)鍵字global,將已經(jīng)聲明的變量前加上global再次聲明的作用是:在當前函數(shù)內(nèi)部對其值做出修改,并且函數(shù)返滬或結(jié)束時,其被改變的值不會恢復(fù),(類似與C++的引用),
后面還有諸多函數(shù)內(nèi)部用到global關(guān)鍵字

④mouse.position()返回的是一個二元組,即當前鼠標的坐標(x,y)

#功能函數(shù),用于設(shè)置單次點擊的次數(shù)
def set_number_of_clicks(num):
    global number_of_clicks
    number_of_clicks=num
    var.set(information())
#功能函數(shù),用于設(shè)置點擊的時間間隔
def set_interval_time(time):
   global interval_time
   interval_time=time
   var.set(information())
#功能函數(shù),用于設(shè)置點擊位置的數(shù)量
def set_target_quantity(num):
    global target_quantity
    target_quantity=num
    var.set(information())
#功能函數(shù),開始自動點擊
def start_setting_coordinates():
         global start_set,mouse_position,windows
         #當start_set==False并且mouse_position鏈表當中的元素個數(shù)還未達到最大值時,繼續(xù)固定鼠標坐標
         if  start_set==False and len(mouse_position)target_quantity:
             start_set=True
             showinfo(title='提示', message="%s%d%s"%('開始設(shè)置鼠標坐標\n一共需要設(shè)置',target_quantity,"個位置"))




         #當start_set==True并且mouse_position鏈表當中的元素個數(shù)達到最大值時,開始自動點擊
         elif start_set==True and len(mouse_position)>=target_quantity:
             showinfo(title='提示', message='鼠標位置設(shè)置完畢,開始自動點擊')
             nim=0
             while nimtotal_number_of_times:
                  for i in range(len(mouse_position)):
                  #以鼠標準確位置為中心的正方形內(nèi)隨機選取點擊位置坐標
                      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"%('點擊次數(shù)達到上限',total_number_of_times,'點擊結(jié)束'))
             #點擊次數(shù)達到最大次數(shù),點擊結(jié)束,清空鼠標位置鏈表內(nèi)容,改變標志變量和當前設(shè)置信息
             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指示點擊次數(shù),interval指示點擊的時間間隔

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

#功能函數(shù),設(shè)置點擊范圍
def start_setting_click_range(rangs):
     global click_range
     ti=rangs.get()#獲取rangs為本框的內(nèi)容(字符串)
     #對于輸入的內(nèi)容進行差錯處理
     #當字符串為空時,設(shè)置點擊范圍click_range為0
     if len(ti)==0:
         click_range=0
         showwarning(title='警告', message='輸入內(nèi)容為空,當前范圍為默認值:0')
         return
        #當字符串不為空時,檢查每一個字符是否為數(shù)字的ascall碼
     for j in range(len(ti)):
         if ti[j]>'9' or ti[j]'0':
             showerror(title='錯誤', message="%s%s%s"%('輸入內(nèi)容:\n',ti,'\n當中含有非法字符'))
             return
      #將通過上方檢驗的只含數(shù)字ascall碼的字符串轉(zhuǎn)化為整數(shù),若整數(shù)大于0,則更新點擊范圍為該值
     ti=int(ti)
     if ti>0:
         click_range=ti
         showinfo(title='提示', message="%s%d"%('設(shè)置成功,點擊范圍為:',click_range))
     var.set(information())

注:對于文本框內(nèi)容的獲取,需要綁定按鈕,通過在按鈕點擊功能函數(shù)當中獲取,直接獲取無法取得

#功能函數(shù),設(shè)置點擊總次數(shù)
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='輸入內(nèi)容為空,當前點擊總次數(shù)為默認值:100')
         return
     for j in range(len(ti)):
         if ti[j]>'9' or ti[j]'0':
             showerror(title='錯誤', message="%s%s%s"%('輸入內(nèi)容:\n',ti,'\n當中含有非法字符'))
             return
     ti=int(ti)
     if ti>0:
         total_number_of_times=ti
         showinfo(title='提示', message="%s%d"%('設(shè)置成功,點擊總次數(shù)為:',total_number_of_times))
     var.set(information())

start_setting_click_times(times)對于輸入文本框的內(nèi)容查錯處理和上一個函數(shù)相同,不再做介紹

###                              主函數(shù)                 ####
def main():
#初始化設(shè)置總菜單條,將菜單放在windows窗體上
   menu_slect_num=tk.Menu(windows)
#聲明第一個下拉單選菜單,將其放在總菜單條上
   file_menu1=tk.Menu(menu_slect_num,tearoff=0)
#設(shè)置第一個下拉菜單的菜單封面(封面標簽)
   menu_slect_num.add_cascade(label='目標數(shù)',menu=file_menu1)
   #添加可選菜單項
   file_menu1.add_radiobutton(label='1',command=lambda :set_target_quantity(1))#設(shè)置菜單項的標簽,綁定功能
   file_menu1.add_separator()#添加菜單項之間的分割線
   ##后面繼續(xù)添加菜單項,綁定功能
   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))#設(shè)置菜單項的標簽,綁定功能
command指的是功能函數(shù),只能將無參函數(shù)直接用函數(shù)名賦值給command, 對于有參函數(shù),需要以:command=lambda :有參函數(shù)(形參1,形參2…) 的形式賦值給command,不然無法正常觸發(fā)功能函數(shù)

#創(chuàng)建第二個下拉單選菜單,與第一個操作一樣
   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))
#創(chuàng)建第三個下拉單選菜單,綁定功能,和上面的操作一樣
     file_menu3=tk.Menu(menu_slect_num,tearoff=0)
     menu_slect_num.add_cascade(label='單次點擊數(shù)',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)#將菜單添加到窗體上
     #添加標簽和按鈕
     #定義標簽對象,設(shè)置目標窗體,標簽文本(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="設(shè)置點擊范圍(像素點,默認為0):\n(以設(shè)置的鼠標坐標為中心展開)",bg='black', fg='white', font=('Arial', 12), width=40, height=2)
     lb3=tk.Label(windows,text="總點擊次數(shù)(默認為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)
#定義按鈕對象,設(shè)置按鈕名稱,綁定功能函數(shù)        
     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))
     #定義文本框,指定目標窗體,設(shè)置輸入的文本為可見(show=None),設(shè)置文本字體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()
#為窗體綁定鍵盤監(jiān)聽器,當按下組合鍵(Shift-A),觸發(fā)功能函數(shù)set_one_mouse_position
    windows.bind("Shift-A>",set_one_mouse_position)
    windows.mainloop()#使窗體內(nèi)容不斷刷新
main()

效果圖



到此這篇關(guān)于Python實戰(zhàn)之用tkinter庫做一個鼠標模擬點擊器的文章就介紹到這了,更多相關(guān)Python tkinter庫鼠標模擬點擊器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • python開發(fā)之tkinter實現(xiàn)圖形隨鼠標移動的方法
  • 使用python tkinter實現(xiàn)各種個樣的撩妹鼠標拖尾效果

標簽:喀什 濟南 黃山 欽州 臺灣 三沙 宿遷 景德鎮(zhèn)

巨人網(wǎng)絡(luò)通訊聲明:本文標題《Python實戰(zhàn)之用tkinter庫做一個鼠標模擬點擊器》,本文關(guān)鍵詞  Python,實戰(zhàn),之用,tkinter,庫做,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Python實戰(zhàn)之用tkinter庫做一個鼠標模擬點擊器》相關(guān)的同類信息!
  • 本頁收集關(guān)于Python實戰(zhàn)之用tkinter庫做一個鼠標模擬點擊器的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    水富县| 襄城县| 屯昌县| 额尔古纳市| 化德县| 英山县| 平原县| 舒城县| 休宁县| 闻喜县| 延长县| 盐源县| 应城市| 论坛| 安义县| 荃湾区| 砚山县| 衡东县| 青海省| 尉氏县| 龙州县| 于田县| 松原市| 高陵县| 敦煌市| 塔城市| 昌吉市| 金华市| 南城县| 巩义市| 民权县| 都江堰市| 古浪县| 罗江县| 章丘市| 乌兰浩特市| 安远县| 罗城| 赤峰市| 禹城市| 佛坪县|