首页 > 解决方案 > 有没有办法在没有循环的情况下显示 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 并且它没有点击,程序没有显示任何错误。

标签: python-3.xtkinter

解决方案


侦听器阻塞,因为它一直等到您停止它并且连接可以完成,因此它之后的任何代码都不会执行。同样,root.mainloop()将阻止主执行并告诉 Tkinter 处理 GUI 上的任何事件。主循环只会在调用后退出root.destroy()(例如,当按下 X 按钮关闭窗口时)。

您应该创建您的 GUI,然后在 GUI 聚焦时按下按钮或键时调用侦听器代码,例如使用:

root.bind("<KeyPress-F>", func=a_function_to_call_when_F_was_pressed)

推荐阅读