目錄
模塊準(zhǔn)備
具體步驟?
設(shè)置監(jiān)視函數(shù)
調(diào)用監(jiān)視器
注意
結(jié)束語
模塊準(zhǔn)備
from pynput.mouse import Listener
這是用來監(jiān)視鼠標(biāo)的,pynput模塊中還有監(jiān)視鍵盤的。
具體步驟?
????????首先,設(shè)置一個全局變量,這個全局變量是用來記錄鼠標(biāo)按下和釋放的
drag_flag = True
設(shè)置監(jiān)視函數(shù)
def on_click(x, y, button, pressed):
global drag_flag, mouse_press, mouse_release
if pressed:
print("按下", x, y)
mouse_press = (x, y)
drag_flag = False
else:
mouse_release = (x, y)
print("釋放", mouse_release)
drag_flag = True
if drag_flag:
# 按下和釋放的坐標(biāo)不相等
if mouse_press != mouse_release:
print("這是鼠標(biāo)拖動")
else:
print("這是鼠標(biāo)點擊")
else:
pass
????????注:這里on_click函數(shù)里面有四個參數(shù),你可以不去使用,但是得定義出來,否則后來代碼會報錯。
? ? ? ? ①首先將drag_flag, mouse_press, mouse_release參數(shù)設(shè)置為全局變量,使得代碼后面能使用,如果鼠標(biāo)按下,監(jiān)視器會監(jiān)視鼠標(biāo)按下的位置,我們可以打印輸出,這里我們使用mouse_press接受這個坐標(biāo),并將drag_flag設(shè)置為False;同樣的,如果鼠標(biāo)沒有按下,我們用mouse_release接收其釋放位置,并將drag_flag設(shè)置為True;
????????②接著判斷drag_flag是否為True,如果為是,則執(zhí)行判斷語句,判斷mouse_press是否等于mouse_release,也就是按下和釋放的坐標(biāo)位置是否一致,如果一致,說明是鼠標(biāo)點擊,否則就是鼠標(biāo)拖動,這里你可以自己加你想要的功能。如果drag_flag是否為False,執(zhí)行else語句,pass直接跳過。
調(diào)用監(jiān)視器
pynput自帶對鼠標(biāo)和鍵盤的監(jiān)視,我們直接如下使用就可以
def main():
with Listener(on_click=on_click) as listener:
listener.join()
注意
監(jiān)視會一直執(zhí)行on_click函數(shù),因此如果沒有drag_flag,也就是像下面這樣
def on_click(x, y, button, pressed):
global mouse_press, mouse_release
if pressed:
print("按下", x, y)
mouse_press = (x, y)
else:
mouse_release = (x, y)
print("釋放", mouse_release)
if mouse_press != mouse_release:
print("這是鼠標(biāo)拖動")
else:
print("這是鼠標(biāo)點擊")
????????運行第一個if后會立刻進(jìn)入第二個if,也就是你鼠標(biāo)剛按下,打印了按下的坐標(biāo)位置后,立刻進(jìn)入判斷鼠標(biāo)按下和釋放的坐標(biāo)是否相同,雖然我這里沒有給mouse_release參數(shù)設(shè)置初始值,但是這里按下坐標(biāo)和釋放坐標(biāo)一般來說是不相同的,所以會打印“這是鼠標(biāo)拖動”,然而這時候我們僅僅是按下鼠標(biāo),沒有進(jìn)行拖動,所以不是我們要實現(xiàn)的功能。
? ? ? ? 但是加入drag_flag且在按下后置為False,釋放后置為True,可以很好解決這個,因為按下后,drag_flag=False,進(jìn)入不了判斷按下坐標(biāo)和釋放坐標(biāo)比較的if判斷,只有當(dāng)釋放鼠標(biāo)后,drag_flag=True,然后才會進(jìn)入這個判斷,最終實現(xiàn)我們想要的功能。
全部代碼如下:
from pynput.mouse import Listener
# 全局變量
drag_flag = True
def on_click(x, y, button, pressed):
global drag_flag, mouse_press, mouse_release
if pressed:
print("按下", x, y)
mouse_press = (x, y)
drag_flag = False
else:
mouse_release = (x, y)
print("釋放", mouse_release)
drag_flag = True
if drag_flag:
# 按下和釋放的坐標(biāo)不相等
if mouse_press != mouse_release:
print("這是鼠標(biāo)拖動")
else:
print("這是鼠標(biāo)點擊")
else:
pass
def main():
with Listener(on_click=on_click) as listener:
listener.join()
if __name__ == '__main__':
main()
結(jié)束語
? ? ? ? 筆者想著是需要一個能獲取鼠標(biāo)選中的文字,但是發(fā)現(xiàn)python和win32都沒有能實現(xiàn)這樣的接口,因此想著用什么方式實現(xiàn)呢,比較簡單的就是監(jiān)視鼠標(biāo)按下和釋放,但是網(wǎng)上對于這塊,講解的人較少,這里所講的,也只是我實踐出來的,對于pynput的監(jiān)視,筆者了解甚少,想看源代碼,跳轉(zhuǎn)后貌似看不出啥。文章來源:http://www.zghlxwxcb.cn/news/detail-652416.html
? ? ? ? 后續(xù)會繼續(xù)更新這方面的內(nèi)容!!文章來源地址http://www.zghlxwxcb.cn/news/detail-652416.html
到了這里,關(guān)于Python實現(xiàn)鼠標(biāo)拖動的監(jiān)視的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!