import os import subprocess import time from tkinter import * class ClickerGame: """ Перед запуском проверьте и исправьте место установки AHK Св-во класса AHK_PATH должно содержать полный путь до запускаемого файла """ AHK_PATH = r"C:\Users\pi3c\AppData\Local\Programs\AutoHotkey\UX\AutoHotkeyUX.exe" def __init__(self): self.__root = Tk() self.__root.geometry("500x400") self.__root.minsize(500, 400) self.__root.title("Clicker Game") self.__root.bind("", self.key) self.process = None self.ahk_flag = False self.frame = Frame(self.__root, relief=RAISED, borderwidth=5, bg='green') self.frame.pack(fill=BOTH, expand=True, padx=5, pady=5) self.label = Label(self.frame, text="Clicker Game", font=("Arial", 25), bg='green') self.label.pack(side=TOP) self.score = 0 self.message = StringVar() self.message.set(f"Your score is: {self.score}") self.label2 = Label(self.frame, textvariable=self.message, font=("Arial", 15), bg='green') self.label2.pack(side=TOP) self.timer = 0 self.start_time = time.time() self.timer_message = StringVar() self.timer_update() self.label3 = Label(self.frame, textvariable=self.timer_message, font=("Arial", 12), bg='green') self.label3.pack(side=LEFT) self.img = PhotoImage(file=os.path.join(os.curdir, 'img.png')) self.clicker = Button(self.frame, text="clickme", image=self.img, command=self.increment) self.clicker.place(relx=0.5, rely=0.5, anchor='center') self.ahk_button = Button(self.__root, text="Manual run AHK", command=self.switcher_ahk) self.ahk_button.pack(side=LEFT, padx=10, pady=10) self.close_button = Button(self.__root, text="EXIT", command=self.quit) self.close_button.pack(side=RIGHT, padx=10, pady=10) self.ahk_button = Button(self.__root, text="Clicker RESET", command=self.clicker_reset) self.ahk_button.pack(side=RIGHT, padx=10, pady=10) mainloop() def __del__(self): """Завершаем поток АНК ели он запущен при выходе""" if self.ahk_flag: self.switcher_ahk() def key(self, event): if event.keycode == 97: # Переключаем статус АНК по numpad1 self.switcher_ahk() if event.keycode == 73 or event.keycode == 17: # Инкремент счетчика по хот кею Ctrl-i или Ctrl-ш в RU раскладке self.increment() def increment(self, keys=None): if keys is not None: """Данный блок необходим, чтоб среда не ругалась на неиспользуемый аргумент keys. При связывании горячей клавиши методом bind, сюда передается инфо о нажатой комбинации. Тут она мне не нужна, поэтому ставим тупо заглушку""" pass self.score += 1 self.message.set(f"Your score is: {self.score}") def switcher_ahk(self): if self.ahk_flag: print("Stop clicker") self.ahk_flag = False self.process.kill() else: print("run clicker") self.ahk_flag = True self.process = subprocess.Popen( [self.AHK_PATH, "clicker.ahk"] ) def timer_update(self): self.timer = int(time.time() - self.start_time) self.timer_message.set(f"Elapsed time:\n{self.timer // 60}min. {self.timer % 60} sec.") self.__root.after(1000, self.timer_update) def clicker_reset(self): if self.ahk_flag: self.switcher_ahk() self.score = 0 self.message.set(f"Your score is: {self.score}") self.timer = 0 self.start_time = time.time() self.timer_update() def quit(self): self.__root.destroy() game = ClickerGame()