TrainDrive

mail@pastecode.io avatar
unknown
python
a year ago
8.7 kB
1
Indexable
Never
import tkinter as tk
from tkinter import ttk
from tkinter import messagebox

import serial


class TrainDriveApp:
    ## Funkce pro kontaktování nrf a přidání nových modelů do seznamu na kartě domů
    """
    def find_and_add_model(self):
        try:
            with serial.Serial('COM3', 9600, timeout=1) as ser: # změň 'COM3' na port, na kterém je modul připojen
                ser.write(b'find_models') # příkaz pro zjištění modelů
                response = ser.readline().decode('utf-8').strip() # přečtení odpovědi ze sériového portu
                if not response:
                    messagebox.showinfo("Nenalezeny žádné nové modely", f"Nebyly nalezeny žádné nové modely v dosahu.")
                else:
                    new_models = response.split(',')
                    self.model_combobox.insert(tk.END, *new_models)
                    messagebox.showinfo("Nové modely nalezeny", f"Byly nalezeny nové modely: {', '.join(new_models)}.")
        except Exception as e:
            messagebox.showerror("Chyba", f"Modul nrf24l01 není připojen na USB. \n\n{e}")
            return
    """

    model_tabs = []





    def __init__(self, master):
        # Vytvoření okna
        pismo="Courier New"

        self.master = master
        self.master.title("TrainDrive")

        self.tab_control = ttk.Notebook(self.master)
        self.home_tab = ttk.Frame(self.tab_control)
        self.tab_control.add(self.home_tab, text='Domů')
        self.tab_control.pack(expand=1, fill='both')


        # Add Model Section
        self.add_model_frame = ttk.Frame(self.home_tab)
        self.add_model_frame.pack(side=tk.TOP, pady=20)
        ttk.Label(self.add_model_frame, text='Přidat nový model:').pack(side=tk.LEFT, padx=10)

        find_add_button = tk.Button(self.add_model_frame, text='Najít a přidat model') ## command=self.find_and_add_model
        find_add_button.pack(side=tk.LEFT, padx=10)



        # Train Model Section
        self.train_frame = ttk.Frame(self.home_tab)
        self.train_frame.pack(side=tk.TOP, pady=20)
        ttk.Label(self.train_frame, text='Výběr modelu:').pack(side=tk.LEFT, padx=10)
        models = ['Model 1', 'Model 2'] # replace with code to get list of models
        self.model_combobox = ttk.Combobox(self.train_frame, values=models)
        self.model_combobox.pack(side=tk.LEFT, padx=10)


        def add_model_tab():


            model_name = self.model_combobox.get()

            if model_name in self.model_tabs:
                # Pokud již záložka pro model existuje, zobrazí se upozornění
                messagebox.showerror("Upozornění", f"Záložka pro model {model_name} již existuje.")
                pass
            elif model_name == "":
                messagebox.showerror("Upozornění", f"Nebyl vybrán žádný model.")
                pass
            else:
                # Pokud záložka pro model neexistuje, vytvoří se nová záložka
                # získání názvu modelu z comboboxu


                self.model_tabs.append(model_name)


                # vytvoření nové záložky s názvem modelu
                self.train_tab = ttk.Frame(self.tab_control)
                self.tab_control.add(self.train_tab, text=model_name)

                # Model Name
                ttk.Label(self.train_tab, text=model_name, font=(pismo, 18)).grid(row=0, column=0, pady=5)

                # Horizontal Separator
                ttk.Separator(self.train_tab, orient='horizontal').grid(row=1, column=0, pady=2)

                # Collectors Section
                self.collectors_frame = ttk.Frame(self.train_tab)
                self.collectors_frame.grid(row=2, column=0, pady=20)
                ttk.Label(self.collectors_frame, text='Sběrač 1', font=(pismo,12)).grid(row=3, column=0, padx=10)
                ttk.Label(self.collectors_frame, text='Sběrač 2', font=(pismo,12)).grid(row=3, column=1, padx=10)
                ttk.Button(self.collectors_frame, text='Nahoru').grid(row=4, column=0, padx=10)
                ttk.Button(self.collectors_frame, text='Dolů').grid(row=5, column=0, padx=10,)
                ttk.Button(self.collectors_frame, text='Nahoru').grid(row=4, column=1, padx=10)
                ttk.Button(self.collectors_frame, text='Dolů').grid(row=5, column=1, padx=10)
                ttk.Separator(self.train_tab, orient='horizontal').grid(row=6, column=0)

                #světla
                self.lights_frame = ttk.Frame(self.train_tab)
                self.lights_frame.grid(row=7, column=0, pady=10)
                ttk.Button(self.lights_frame, text='S1', style='White.TButton').grid(row=0, column=0, padx=5)
                ttk.Button(self.lights_frame, text='S2', style='Red.TButton').grid(row=0, column=1, padx=5)
                ttk.Button(self.lights_frame, text='S3', style='Red.TButton').grid(row=0, column=2, padx=5)
                ttk.Button(self.lights_frame, text='S4', style='White.TButton').grid(row=0, column=3, padx=5)
                ttk.Button(self.lights_frame, text='S5', style='White.TButton').grid(row=0, column=4, padx=5)
                ttk.Button(self.lights_frame, text='S6', style='Red.TButton').grid(row=0, column=5, padx=5)
                ttk.Button(self.lights_frame, text='S7', style='Red.TButton').grid(row=0, column=6, padx=5)
                ttk.Button(self.lights_frame, text='S8', style='White.TButton').grid(row=0, column=7, padx=5)

                # Horizontal Separator
                ttk.Separator(self.train_tab, orient='horizontal').grid(row=9, column=0, pady=5)

                # Vertical Section
                self.speed_direction_frame = ttk.Frame(self.train_tab)
                self.speed_direction_frame.grid(row=10, column=0, pady=10)
                ttk.Label(self.speed_direction_frame, text='Rychlost:').grid(row=0, column=0, padx=5, pady=5, sticky='w')
                self.speed_slider = ttk.Scale(self.speed_direction_frame, from_=0, to=100, length=400, orient='horizontal')
                self.speed_slider.grid(row=1, column=0, padx=5, pady=5)
                ttk.Button(self.speed_direction_frame, text='Směr').grid(row=2, column=0, padx=5, pady=5, sticky='w')
                ttk.Button(self.speed_direction_frame, text='Potvrdit').grid(row=2, column=0, padx=5, pady=5, sticky='e')

                # Vertical Separator
                ttk.Separator(self.train_tab, orient='vertical').grid(row=2, column=1, rowspan=8, padx=20)

                # Horizontal Section
                self.interior_lights_frame = ttk.Frame(self.train_tab)
                self.interior_lights_frame.grid(row=11, column=0, pady=20)
                ttk.Button(self.interior_lights_frame, text='Zapnout/Vypnout interiérové světlo').grid(row=0, column=0, padx=5, pady=5)

                # RFID Section
                self.rfid_frame = ttk.Frame(self.train_tab)
                self.rfid_frame.grid(row=12, column=0, pady=20)
                ttk.Label(self.rfid_frame, text='RFID Tag 1:').grid(row=0, column=0, padx=5, pady=5, sticky='w')
                ttk.Label(self.rfid_frame, text='RFID Tag 2:').grid(row=1, column=0, padx=5, pady=5, sticky='w')
                ttk.Label(self.rfid_frame, text='RFID Tag 3:').grid(row=2, column=0, padx=5, pady=5, sticky='w')
                ttk.Label(self.rfid_frame, text='Čas přijmu:').grid(row=0, column=1, padx=5, pady=5, sticky='e')
                ttk.Label(self.rfid_frame, text='Čas přijmu:').grid(row=1, column=1, padx=5, pady=5, sticky='e')
                ttk.Label(self.rfid_frame, text='Čas přijmu:').grid(row=2, column=1, padx=5, pady=5, sticky='e')

                # Status Bar
                self.status_bar = ttk.Frame(self.train_tab)
                self.status_bar.grid(row=13, column=0, pady=10, sticky='we')
                ttk.Label(self.status_bar, text='Stav spojení:').grid(row=0, column=0, padx=10, pady=5, sticky='w')
                ttk.Label(self.status_bar, text='Stav baterie:').grid(row=0, column=2, padx=10, pady=5, sticky='e')
                self.connection_status = ttk.Label(self.status_bar, text='OK')
                self.connection_status.grid(row=0, column=1, padx=10, pady=5)
                self.battery_status = ttk.Label(self.status_bar, text='100%')

            pass


        add_tab_button = ttk.Button(self.train_frame, text='Přidat kartu', command=add_model_tab)
        add_tab_button.pack(side=tk.LEFT, padx=10)

root = tk.Tk()
main = TrainDriveApp(master=root)
root.mainloop()