我希望我的代码在我点击LMB时启动,但是我的代码在我点击按钮后立即启动。如何让我的代码在继续之前等待鼠标输入?
我已经尝试过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()
函数鼠标点击“确定”按钮后立即启动功能鼠标点击,然后我点击确定按钮的xclick,yclick。我想要功能鼠标点击等到我瞄准屏幕上的东西并点击鼠标左键然后给我xclick,yclick我点击的地方。
为什么使用win32api
来获取鼠标按键和位置? Tkinter可以做到这一点。您可以使用“确定”按钮激活一个新的左键按钮绑定,并让该绑定在调用时自行禁用。您甚至可以更改光标以指示程序处于您希望用户单击某个位置的状态:
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之外你还需要一些东西,比如win32api
。此外,因为您无法通过单击窗口外部来生成tkinter事件,所以您需要一个循环来重复检查按钮状态,直到单击该按钮。你可以使用after
在tkinter中创建一个循环而不阻塞mainloop:
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()