检测python中的单击

2024-10-03 15:27:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望用python制作一个CPS(ClickPerSecond)应用程序 我做了一些研究,最终得到了以下代码:

from pynput.mouse import Listener, Button, Controller
import time

new = 0
old = 0

def on_click(x, y, button, pressed):
  global old
  global new
  if pressed:
    new = time.time()
    print("Click Detected")
    CPS = round((1/(old-new))*-1)
    old = new
    print(CPS)
      
with Listener(on_click=on_click) as listener:
      listener.join()

此代码检测右键和左键单击并计算我的CPS。 但是我想要一个tkinter接口,它只写我的CPS的一个文本变量。 最大的问题是我想点击屏幕上的每一个地方,这会检测到它。 但是我不知道如何将它插入到我的代码中。T-T

你能帮我吗


Tags: 代码import应用程序newtimeonglobalold
2条回答

这里有一个简单的解决方案,我相信它能满足你的需求pynputtime不是此方法所必需的。相反,我们利用了tkinter的afterbind_all方法

import tkinter as tk

root = tk.Tk()

cps_lbl = tk.Label(root)
cps_lbl.grid()

#reset cps to zero every second
def reset_counter():
    global cps
    cps = 0
    root.after(1000, reset_counter)

#increment cps and publish results
def click_counter(event):
    global cps
    cps += 1
    cps_lbl['text'] = f'{cps} clicks per second'
    
root.bind_all('<1>', click_counter) #left click
root.bind_all('<3>', click_counter) #right click

reset_counter()

root.mainloop()   

或者,代替bind_all,您可以只bindroot并强制焦点停留在root

替换:

root.bind_all('<1>', click_counter) #left click
root.bind_all('<3>', click_counter) #right click

与:

root.bind('<1>', click_counter)
root.bind('<3>', click_counter)
root.focus_force()

对于这个不完全完整的问题,有点讽刺意味的答案是在tk上创建全屏画布并计算点击次数。 e、 g

import tkinter
root = tkinter.Tk()
root.overrideredirect(True)
root.geometry("{0}x{1}+0+0".format(root.winfo_screenwidth(), root.winfo_screenheight()))

var = StringVar()
label = Label(root, textvariable=var, relief=RAISED)

var.set("Hey!? Are You Click'n or what?") # set it to Your CPS
label.pack()
root.mainloop()

相关问题 更多 >