Задать вопрос
@Unandoriz

Не работает код, что делать?

Попросил нейронку написать код для проги которая автоматически вводит символ который на экране, но он отказывается запускаться. Несколько часов мучался, но так и не понял в чём проблема, все библиотеки вроде как установлены. Просто при запуске вылазит консоль и сразу закрывается, ошибок тоже никаких не вылазит. Python 3.13
import tkinter as tk
import time
import keyboard
import pyautogui
import threading
import json

class AutoKeylogger:
    def __init__(self, window_title=None):
        self.running = False
        self.window_title = window_title
        self.hwnd = None
        self.thread = None
        self.config_file = "config.json"
        self.load_config()

        self.root = tk.Tk()
        self.root.title("Автоматический ввод")
        self.root.overrideredirect(True)
        self.root.wm_attributes("-topmost", True)

        self.status_label = tk.Label(self.root, text="Остановлено", width=20)
        self.status_label.pack()

        self.start_button = tk.Button(self.root, text="Начать", command=self.start_tracking)
        self.start_button.pack(side=tk.BOTTOM, pady=10)

        self.stop_button = tk.Button(self.root, text="Остановить", command=self.stop_tracking)
        self.stop_button.pack(side=tk.BOTTOM, pady=10)

        self.current_char_label = tk.Label(self.root, text="Текущий символ: -", width=20)
        self.current_char_label.pack()

        self.speed_slider = tk.Scale(self.root, from_=0.1, to=2.0, resolution=0.1, orient=tk.HORIZONTAL, label="Скорость ввода")
        self.speed_slider.set(1.0)  # Значение по умолчанию
        self.speed_slider.pack(side=tk.BOTTOM, pady=10)

        self.coords = None
        self.coords_lock = threading.Lock()
        self.update_coords_button = tk.Button(self.root, text="Обновить координаты", command=self.update_coords)
        self.update_coords_button.pack(side=tk.BOTTOM, pady=10)

        self.root.bind('<F6>', self.toggle_running)

    def start_tracking(self):
        if not self.running:
            self.running = True
            self.status_label.config(text="Запущено...")
            self.thread = threading.Thread(target=self.track_and_input)
            self.thread.start()

    def stop_tracking(self):
        if self.running:
            self.running = False
            self.status_label.config(text="Остановлено")
            if self.thread:
                self.thread.join()
            self.thread = None

    def track_and_input(self):
        while self.running:
            try:
                self.hwnd = pyautogui.getWindowsWithTitle(self.window_title)[0].window

                if self.hwnd is None:
                    print("Окно с указанным названием не найдено.")
                    self.status_label.config(text="Окно не найдено")
                    time.sleep(1)
                    continue

                screenshot = pyautogui.screenshot()

                # Получаем координаты выделенной области
                self.coords = pyautogui.mouseInfo()

                # Отображаем текущий символ
                current_char = keyboard.read_event(suppress=True)
                self.current_char_label.config(text=f"Текущий символ: {current_char}")

                # Ввод символа с учетом скорости
                time.sleep(1 / self.speed_slider.get())
                keyboard.write(current_char)

            except Exception as e:
                print(f"Ошибка: {e}")
                self.status_label.config(text=f"Ошибка: {e}")

    def toggle_running(self):
        self.running = not self.running
        if self.running:
            self.start_tracking()
        else:
            self.stop_tracking()

    def update_coords(self):
        with self.coords_lock:
            self.coords = pyautogui.mouseInfo()
            self.status_label.config(text="Координаты обновлены")

    def save_config(self):
        config = {
            "window_title": self.window_title,
            "speed": self.speed_slider.get()
        }
        with open(self.config_file, "w") as f:
            json.dump(config, f)

    def load_config(self):
        try:
            with open(self.config_file, "r") as f:
                config = json.load(f)
                self.window_title = config["window_title"]
                self.speed_slider.set(config["speed"])
        except FileNotFoundError:
            self.window_title = "Название окна"
            self.speed_slider.set(1.0)
        except json.JSONDecodeError:
            print("Ошибка при чтении файла конфигурации. Используются значения по умолчанию.")
            self.window_title = "Название окна"
            self.speed_slider.set(1.0)

    def run(self):
        self.load_config()

    def start(self):
        self.run()

    def close(self):
        self.save_config()
        self.root.destroy()
  • Вопрос задан
  • 56 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
Daemon23RUS
@Daemon23RUS
Попросил нейронку написать код ... Несколько часов мучался, но так и не понял в чём проблема...

А думать пробовали ? Хотя бы по вершкам, не вникая в детали, при беглом просмотре, что делает программа ?
Я Вас подталкиваю самостоятельно понять базу, просто если Вы этого не увидите, программирование не Ваше.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы