python - Pynput 按键延迟和 Tkinter
问题描述
我只是想制作一个可以执行一些键盘输入的程序。我想在每次击键之间设置一个延迟,我计划在未来随机化。
但是,我不确定如何after()
与 Tkinter 一起使用。没有 Tkinter,time.sleep
工作正常 - 但使用它,GUI 崩溃。
任何帮助,将不胜感激。
import time
import tkinter as tk
from pynput.keyboard import Key, Controller as KeyboardController
from pynput.mouse import Button, Controller as MouseController
keyboard = KeyboardController()
mouse = MouseController()
def copy(a):
pause_input=17
pause_input2=2
pause_input3=0.5
x=1
while a >= x:
x = x+1
time.sleep(pause_input)
keyboard.press('t')
keyboard.release('t')
time.sleep(pause_input3)
keyboard.press('e')
keyboard.release('e')
time.sleep(pause_input3)
keyboard.press('s')
keyboard.release('s')
keyboard.press('t')
keyboard.release('t')
root = tk.Tk()
root.title("GUI Button")
btn1 = tk.Button(root, text="Button 1", command=lambda : copy(360))
btn2 = tk.Button(root, text="Button 2")
btn1.pack()
btn2.pack()
root.mainloop()
解决方案
首先:gui 不会崩溃 - 它工作正常,并且在 mainloop 中它执行您正在编写的命令。它不刷新,因为它打印输出而不是刷新 UI。在创建 UI 时需要记住的第一个注意事项是,您应该省略主线程中不必要的工作。可能的解决方案:将工作移至单独的线程并在那里运行,例如:
import time
import tkinter as tk
from pynput.keyboard import Controller as KeyboardController
import threading
keyboard = KeyboardController()
def copy(a):
def print_test(a):
pause_input=2
pause_input2=2
pause_input3=0.5
for _ in range(a):
time.sleep(pause_input)
keyboard.press('t')
keyboard.release('t')
time.sleep(pause_input3)
keyboard.press('e')
keyboard.release('e')
time.sleep(pause_input3)
keyboard.press('s')
keyboard.release('s')
keyboard.press('t')
keyboard.release('t')
print("Wrote test")
t = threading.Thread(target=print_test, args=(a,))
t.start()
root = tk.Tk()
root.title("GUI Button")
btn1 = tk.Button(root, text="Button 1", command=lambda : copy(360))
btn1.pack()
root.mainloop()
推荐阅读
- php - codeigniter 表单从引导表单接收空白电子邮件
- html - 需要搜索列表作为 ionic 3 中的弹出框
- javascript - select2选项空间未搜索
- java - 如何在基于spring注解的项目中提供数据源入口。
- javascript - 如何安全地访问 firebase 数据以自动填充网页?
- python - Groupby和具有相同值的多列的总和
- apache-kafka - Kafka 集群在高输入时流超时
- java - TAG 和 UpdateUI 在 LoginActivity.java 的 FragmentActivity 错误中具有私有访问权限
- ruby-on-rails - Rails 5.x:如何在运行时添加路由而不覆盖原始路由表?
- php - 在 wordpress 中重复发布时出现 503 错误