Python 如何等待鼠标点击?
我希望我的代码在单击鼠标左键时启动,但我的代码在单击鼠标左键后立即启动。如何使我的代码在继续之前等待鼠标输入 我已经尝试了Python 如何等待鼠标点击?,python,input,tkinter,onclicklistener,Python,Input,Tkinter,Onclicklistener,我希望我的代码在单击鼠标左键时启动,但我的代码在单击鼠标左键后立即启动。如何使我的代码在继续之前等待鼠标输入 我已经尝试了input(),但这不是我想要的 from tkinter import * import PIL.ImageGrab from PIL import ImageGrab import time import numpy as np import pyautogui import win32api def mouseposition(): global xclick
input()
,但这不是我想要的
from tkinter import *
import PIL.ImageGrab
from PIL import ImageGrab
import time
import numpy as np
import pyautogui
import win32api
def mouseposition():
global xclick
global yclick
xclick, yclick = win32api.GetCursorPos()
print(xclick, yclick)
def mouseclick():
state_left = win32api.GetKeyState(0x01) # Left button down = 0 or 1. Button up = -127 or -128
a = win32api.GetKeyState(0x01)
if a != state_left:
mouseposition() # Button state changed
state_left = a
print("1")
else:
mouseposition()
print("2")
def something():
window.update()
mouseclick()
window = Tk()
window.geometry("700x500")
window.title("Testing")
b = Button(window, text="OK", command=something)
b.grid(row=0, column=2, sticky=W)
window.update()
window.mainloop()
函数某物在我点击OK按钮并获得OK按钮的
xclick,yclick
后立即启动函数mouseclick
。我希望函数mouseclick
等待,直到我瞄准屏幕上的某个东西并单击鼠标左键,然后给我单击的位置的xclick,yclick
。为什么要使用win32api
来获得鼠标按钮的按下和位置?特金特可以做得很好。您可以使用OK按钮激活一个新的左鼠标按钮绑定,并让该绑定在被调用时自动禁用。您甚至可以更改光标以指示程序处于期望用户单击某个位置的状态:
from tkinter import *
def enable_mouseposition():
window.bind("<Button-1>", get_mouseposition)
window.config(cursor="crosshair")
def get_mouseposition(event):
print(event.x, event.y)
window.unbind("<Button-1>")
window.config(cursor="arrow")
window = Tk()
window.geometry("700x500")
window.title("Testing")
b = Button(window, text="OK", command=enable_mouseposition)
b.grid(row=0, column=2, sticky=W)
window.mainloop()
这是伟大的工作,但只有当我想点击我的tkinter窗口内。若我想点击的那个点在我的窗口之外呢?啊,是的,这将需要一些不只是tkinter的东西,我会更新我的答案。
from tkinter import *
import win32api
def enable_mouseposition():
window.after(10, get_mouseposition)
def get_mouseposition():
state_left = win32api.GetKeyState(0x01)
if state_left == -127 or state_left == -128:
xclick, yclick = win32api.GetCursorPos()
print(xclick, yclick)
else:
window.after(10, get_mouseposition)
window = Tk()
window.geometry("700x500")
window.title("Testing")
b = Button(window, text="OK", command=enable_mouseposition)
b.grid(row=0, column=2, sticky=W)
window.mainloop()