python-3.x - 有没有办法在没有循环的情况下显示 GUI?还是另一种解决方法?
问题描述
当 keylisteneron_press
高于root.mainloop()
autoclicker 工作时,但 GUI 不显示。
我试图将 keylistener 移到root.mainloop()
GUI 下,但它没有点击。
from tkinter import *
import tkinter as tk
from tkinter import ttk
import sys
import time
import threading
from pynput import mouse
from pynput.mouse import Button, Controller
from pynput.keyboard import Listener, KeyCode
delay = 0.001
button = Button.left
start_stop_key = KeyCode(char='f')
class ClickMouse(threading.Thread):
def __init__(self, delay, button):
super(ClickMouse, self).__init__()
self.delay = delay
self.button = button
self.running = False
self.program_running = True
def start_clicking(self):
self.running = True
def stop_clicking(self):
self.running = False
def exit(self):
self.stop_clicking()
self.program_running = False
def run(self):
while self.program_running:
while self.running:
mouse.click(self.button)
time.sleep(self.delay)
mouse = Controller()
click_thread = ClickMouse(delay, button)
click_thread.start()
def on_press(key):
if key == start_stop_key:
if click_thread.running:
click_thread.stop_clicking()
else:
click_thread.start_clicking()
#keylistener
with Listener(on_press=on_press) as listener:
listener.join()
root = Tk()
#gui code
#I don't wanna show it :P
root.geometry("300x350")
root.title("autoclicker")
root.resizable(False, False)
root.mainloop()
我想要用python制作的带有GUI的自动点击器
错误:root.mainloop()
阻止 keylistener 并且它没有点击,程序没有显示任何错误。
解决方案
侦听器阻塞,因为它一直等到您停止它并且连接可以完成,因此它之后的任何代码都不会执行。同样,root.mainloop()
将阻止主执行并告诉 Tkinter 处理 GUI 上的任何事件。主循环只会在调用后退出root.destroy()
(例如,当按下 X 按钮关闭窗口时)。
您应该创建您的 GUI,然后在 GUI 聚焦时按下按钮或键时调用侦听器代码,例如使用:
root.bind("<KeyPress-F>", func=a_function_to_call_when_F_was_pressed)
推荐阅读
- javascript - 使用 window.prompt() 在 java 脚本中创建一个数组
- vb.net - 使 checkbox.Checked = True 其对应的 PictureBox 被点击
- r - R plotly mesh3 通过原点的坐标线
- java - How to create multiWidget Form
- python - HaarCascade 训练:合并 .lst 文件
- flask-sqlalchemy - 如何对 flask-admin 数据库列执行操作以将结果存储在同一表的其他列中
- python - 使用自签名证书将 pip install 安装到私有 pypi 服务器时如何忽略引发的安全警告
- laravel - 如何配置 Laravel Passport 的 '/oauth/token' 速率限制?
- django - Markdown 模板无法正确呈现 HTML
- c# - Removing items in a list of list