Wondering how to bind an event to the left mouse button but not having to be hovered in the window/app/root. Basically, I want the event to happen where-ever my mouse pointer happens to be on my screen. Right now I can only figure out how to make the mouse button bindings work when the mouse is hovered on the window/app/root.
from tkinter import*
from tkinter import Tk, Label, StringVar
import random
import pyautogui
root = Tk()
root.configure(background='black')
root.attributes("-topmost", True)
root.overrideredirect(True)
root.geometry("100x100")
title_bar = Frame(root, bg='black')
title_bar.pack(side=TOP, fill=X)
tout = StringVar()
label = Label(root, textvariable=tout, font=('TkDefaultFont',
50), bg='black', fg='red')
label.pack()
def _quit():
root.quit()
root.destroy()
def move_app(event):
root.geometry(f' {event.x_root} {event.y_root}')
def gen_rand(event):
randvar = random.randint(0,99)
tout.set(randvar)
def clear_rand(event):
tout.set("")
myButton = Button(title_bar, text="X", font=('TkDefaultFont', 5),
bg='black', activebackground='red', fg='red', command=_quit)
myButton.pack(side=RIGHT)
root.bind('<Button-1>', gen_rand)
root.bind('<Button-3>', clear_rand)
root.bind("<B2-Motion>", move_app)
root.mainloop()
CodePudding user response:
You cannot do this with tkinter, you'll have to find some platform-specific way to do it. Tkinter can only process events when it is the application in focus.
CodePudding user response:
This is not something that can be done with Tkinter, but rather Pyautogui to generate an event
pyautogui.click(x=100, y=200) # move to 100, 200, then click the left mouse button.
if you wish to read an event you must use other module such as pynput How to know if the left mouse click is pressed
from pynput import mouse
def on_click(x, y, button, pressed):
if button == mouse.Button.left:
print('{} at {}'.format('Pressed Left Click' if pressed else 'Released Left Click', (x, y)))
return False # Returning False if you need to stop the program when Left clicked.
else:
print('{} at {}'.format('Pressed Right Click' if pressed else 'Released Right Click', (x, y)))
listener = mouse.Listener(on_click=on_click)
listener.start()
listener.join()```
[1]: https://pypi.org/project/PyAutoGUI/
[2]: https://stackoverflow.com/questions/39235454/how-to-know-if-the-left-mouse-click-is-pressed
