首页 > 解决方案 > 如何阻止我的 python 脚本变得无响应?

问题描述

我对编程真的很陌生,我试图利用我的知识制作一个自动点击应用程序,在按下 f6 时反复点击鼠标左键。我在 Mac 上编写和运行代码。我的问题是一切正常,但是当我释放 f6 时,它确实停止按预期单击,但应用程序窗口随后变得无响应并且需要强制退出。有什么办法可以解决这个问题,因为它严重限制了功能?

import tkinter as tk
from pynput.keyboard import Key, Listener
import pyautogui


def clicker():
    def on_press(key):
        if key == Key.f6:
            pyautogui.click(button='left')

    def on_release(key):
        if key == Key.esc:
            # Stop listener
            return False

    with Listener(
            on_press=on_press,
            on_release=on_release) as listener:
        listener.join()


window = tk.Tk()

button = tk.Button(
    master=window,
    text='click me',
    command=clicker,
    height=10,
    width=20
)

button.pack()

window.mainloop()

更新代码:

import threading
import tkinter as tk
from pynput.keyboard import Key, Listener
import pyautogui


def helper():
    h = threading.Thread(target = clicker, daemon=True)
    h.start()


def clicker():
    def on_press(key):
        if key == Key.f6:
            pyautogui.click(button='left')

    def on_release(key):
        if key == Key.esc:
            # Stop listener
            return False

    with Listener(
            on_press=on_press,
            on_release=on_release) as listener:
        listener.join()


window = tk.Tk()

title = tk.Label(
    master = window,
    text = 'Autoclicker'
)

button = tk.Button(
    master=window,
    text='click me',
    command=helper,
    height=10,
    width=20
)

button.pack()
title.pack()



window.mainloop()

标签: pythonmacos

解决方案


您可以将该方法作为一个新线程启动:

import _thread


def helper():
    # helper function for thread call
    _thread.start_new_thread(clicker)

这将使主线程离开mainloop并应防止窗口冻结。


推荐阅读