Untitled

 avatar
unknown
python
18 days ago
5.8 kB
6
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