Почему вы используете win32api
, чтобы получить нажатие и расположение кнопки мыши?Tkinter может сделать это просто отлично.Вы можете использовать кнопку 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, например win32api
.Кроме того, поскольку вы не можете сгенерировать событие tkinter, щелкнув за пределами окна, вам потребуется цикл, который проверяет состояние кнопки несколько раз, пока кнопка не будет нажата.Вы можете сделать цикл в tkinter, не блокируя основной цикл, используя after
:
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()