Untitled
Anonymous
python
02/22/2025 5:21 PM
7.5 KB
83
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