Untitled

 avatar
unknown
python
2 months ago
5.8 kB
14
No Index
import tkinter as tk
import threading
import time
import subprocess
from pynput.mouse import Controller, Button
from pynput.keyboard import Listener, Key
import pygame
import webbrowser

# Używane globalne zmienne
mouse_position = None  # Przechowuje pozycję myszy
is_clicking = False  # Czy program klika lewym przyciskiem myszy
mouse = Controller()  # Inicjalizacja kontrolera myszy


# Funkcja do odtwarzania dźwięku
def play_sound():
    pygame.mixer.init()
    pygame.mixer.music.load("sound.mp3")  # Dodaj ścieżkę do pliku dźwiękowego
    pygame.mixer.music.play()


# Funkcja do odliczania i uzyskiwania pozycji myszy
def countdown_and_get_mouse_position(label, countdown_label):
    global mouse_position
    for i in range(10, 0, -1):
        countdown_label.after(0, lambda count=i: countdown_label.config(text=f"Odliczanie: {count} sekund"))
        time.sleep(1)
    countdown_label.after(0, lambda: countdown_label.config(text="Czas minął!"))

    # Pobiera pozycję myszy
    mouse_position = mouse.position  # Przechowuje pozycję myszy jako zmienną globalną
    label.after(0, lambda: label.config(text=f"Pozycja myszy: {mouse_position}"))

    # Odtwarzanie dźwięku
    play_sound()


# Funkcja uruchamiająca odliczanie
def start_tracking(label, countdown_label):
    # Uruchamia odliczanie i śledzenie pozycji myszy w osobnym wątku
    thread = threading.Thread(target=countdown_and_get_mouse_position, args=(label, countdown_label))
    thread.start()

# Tworzenie funkcji otwierającej adres URL
def open_url(url):
    webbrowser.open(url)

# Funkcja do kliknięcia myszy
def click_mouse():
    global is_clicking
    while is_clicking:
        if mouse_position:  # Jeśli znaleziona jest pozycja myszy
            mouse.position = mouse_position  # Ustaw pozycję myszy
            mouse.click(Button.left, 1)  # Kliknij lewy przycisk myszy
        time.sleep(0.05)  # Przerwa między kliknięciami wynosi 50 ms


# Funkcja obsługująca klawisz F11
def toggle_click():
    global is_clicking
    if is_clicking:  # Jeśli klikamy, to zatrzymaj klikanie
        is_clicking = False
        print("Klikanie zatrzymane.")
    else:  # Jeśli nie klikamy, rozpocznij klikanie
        is_clicking = True
        print("Klikanie rozpoczęte.")
        thread = threading.Thread(target=click_mouse)  # Klikanie w osobnym wątku
        thread.start()


# Nasłuchiwanie klawiszy F11
def listen_to_keyboard():
    def on_press(key):
        if key == Key.f11:  # Obsługa klawisza F11
            toggle_click()

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

# Funkcja uruchamiająca ClientServer.exe
def start_client():
    try:
        subprocess.Popen(["ClientServer.exe"])  # Uruchamianie client.exe
        print("Klient został uruchomiony.")
    except FileNotFoundError:
        print("Plik ClientServer.exe nie został znaleziony!")


# Tworzenie GUI za pomocą tkinter
def create_gui():
    root = tk.Tk()
    root.title("Odczytywanie stanu lokomotywy")


    # Ustawienie stałego rozmiaru okna
    root.geometry("400x550")  # Zwiększona wysokość okna
    root.resizable(False, False)


    # Etykieta do wyświetlania pozycji myszy
    label = tk.Label(
        root,
        text=(
            "W grze wciśnij F8 i wybierz Vehicle I/O. Następnie przesuń niebieskie okno poza widoczny obraz gry - najlepiej w prawy dolny róg,"
            "\nale tak, żeby na ekranie znajdował się fragment przycisku \nCopy To Clipboard"
            "\n\nKliknij 'Start', aby rozpocząć pomiar pozycji myszy. "
            "\nNajedź kursorem na widoczny fragment przycisku Copy To Clipboard \nPo zakończonym pomiarze usłyszysz dźwięk. "
            "\n\nUruchom serwer i prasowanie danych przyciskiem pod spodem, włączy się konsola z informacjami o adresach i zapytaniach do serwera."
            "\n\nWróc do gry i naciśnij przycisk F11. Kursor ustawi się nad przyciskiem Copy To Clipboard i zacznie go klikać co 150ms. "
            "\nNie przeszkadza to w grze, jednak nie możesz w tym czasie używać myszki. Aby zakończyć klikanie naciśnij ponownie przycisk F11"
            "\n\nProgram pobiera dane z systemowego schowka, prasuje i wysyła je na serwer w formacie JSON. Dane JSON możesz obejrzeć dodając na końcu "
            "\nadresów z konsoli /data."
            "\n\nJarkPomsky"

        ),
        wraplength=380,  # Dostosowanie długości tekstu
    )
    label.pack(pady=10)

    # Etykieta do wyświetlania odliczania
    countdown_label = tk.Label(root, text="")
    countdown_label.pack(pady=10)

    # Przycisk do śledzenia pozycji myszy
    start_button = tk.Button(root, text="Rozpocznij pomiar pozycji myszy", command=lambda: start_tracking(label, countdown_label))
    start_button.pack(pady=10)

    # Przycisk do uruchamiania klienta
    client_button = tk.Button(root, text="Uruchom serwer i prasowanie danych", command=start_client)
    client_button.pack(pady=10)

    # Etykieta działająca jak hiperłącze
    hyperlink = tk.Label(
        root,
        text="Kliknij tutaj, aby podejrzeć tablice JSON",
        fg="blue",  # Kolor linku
        cursor="hand2"  # Kursor zmienia się na dłoń
    )
    hyperlink.pack(pady=20)

    # Powiązanie działania z kliknięciem na "link"
    hyperlink.bind("<Button-1>", lambda e: open_url("http://127.0.0.1:5000/data"))

    # Rozpoczęcie nasłuchiwania klawiatury w osobnym wątku
    keyboard_thread = threading.Thread(target=listen_to_keyboard, daemon=True)
    keyboard_thread.start()

    # Start aplikacji
    root.mainloop()


# Uruchom aplikację
create_gui()
Editor is loading...
Leave a Comment