StudyRepo_Synergy/part1_basic/final_test/app.py

114 lines
4.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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("<Key>", 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()