gui

mail@pastecode.io avatar
unknown
plain_text
a year ago
16 kB
0
Indexable
Never
import tkinter as tk
from tkinter import *
from tkinter import ttk
from functools import partial
from datetime import datetime

from GUI.ramka import OutFrame

import serial

 ser = serial.Serial('COM4', 19200, 8, 'N', 1)


LARGE_FONT = ("Roboto", 12)
MID_FONT = ("Roboto", 9)

buttonIconOnOff = [False, False, False, False, False, False, False, False]
lista = [[None, None] for _ in range(8)]
class Application(tk.Tk):
    WIDTH = 780
    HEIGHT = 520

    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        tk.Tk.wm_title(self, "OUT Menager")
        self.geometry(f"{Application.WIDTH}x{Application.HEIGHT}")
        self.resizable(False, False)

        container = tk.Frame(self)
        container.grid(column=0, row=0, sticky='nsew')

        self.frames = {}

        for F in (StartPage, PageOne):
            frame = F(container, self)

            self.frames[F] = frame

            frame.grid(row=0, column=0, sticky="nsew")

        self.show_frame(StartPage)

    def show_frame(self, cont):
        frame = self.frames[cont]
        frame.tkraise()


def qf():
    print("done")


class StartPage(tk.Frame):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        self.grid_rowconfigure(0, weight=1)
        self.grid_rowconfigure(1, weight=1)
        self.grid_columnconfigure(0, weight=4)
        self.grid_columnconfigure(1, weight=1)

        outs_frame = tk.LabelFrame(self, height=500, width=620,
                                   text='   STEROWANIE WYJSCIAMI   ', font=LARGE_FONT
                                   )
        outs_frame.grid_propagate(False)
        outs_frame.grid(row=0, rowspan=2, column=0, sticky='', ipadx=12, padx=10, pady=10)
        outs_frame.grid_rowconfigure(0, weight=1)
        outs_frame.grid_rowconfigure(1, weight=1)
        outs_frame.grid_columnconfigure(0, weight=1)
        outs_frame.grid_columnconfigure(1, weight=1)
        outs_frame.grid_columnconfigure(2, weight=1)
        outs_frame.grid_columnconfigure(3, weight=1)

        right_bar = ttk.Frame(self, width=140, height=520)
        right_bar.grid(row=0, rowspan=2, column=1, sticky='nsew')
        right_bar.grid_propagate(False)

        self.buttonIconCfg = tk.PhotoImage(file='UI/images/cfg.png')
        button1 = ttk.Button(master=right_bar, text="OUT CFG",
                             image=self.buttonIconCfg, compound='bottom',
                             command=lambda: controller.show_frame(PageOne))
        button1.grid(row=0, column=0, sticky='', pady=20)

        buttonIconOff = tk.PhotoImage(file='UI/images/bulboff2.png')
        buttonIconOn = tk.PhotoImage(file='UI/images/bulbon2.png')
        buttonIcon = buttonIconOff

        def button1click():
            if (bulb_button1['text'] == 'Off'):
                bulb_button1['text'] = 'On'
                bulb_button1['image'] = buttonIconOn
                x = '$FE$FE$88$11$11$FF$FF$FF$FF$FF$FF$01$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$C6$1F$FE$0D'
                if lista[0][0] == 1 and lista[0][1]:
                    getHexString = x.replace('$', '')
                if lista[0][0] == 2 and lista[0][1]:
                    x = '$FE$FE$91$11$11$FF$FF$FF$FF$FF$FF$01$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$E4$28$FE$0D'
                    getHexString = x.replace('$', '')
                print("wypisz ciag szesnastowy ", getHexString)
                binaryNotation = bytearray.fromhex(getHexString)
                print("wypisz ciag binarny ", binaryNotation)
                ser.write(binaryNotation)

            else:
                bulb_button1['text'] = 'Off'
                bulb_button1['image'] = buttonIconOff
                x = '$FE$FE$89$11$11$FF$FF$FF$FF$FF$FF$01$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$C0$67$FE$0D'
                getHexString = x.replace('$', '')
                print("wypisz ciag szesnastowy ", getHexString)
                binaryNotation = bytearray.fromhex(getHexString)
                print("wypisz ciag binarny ", binaryNotation)
                ser.write(binaryNotation)


        def button2click():
            if (bulb_button2['text'] == 'Off'):
                bulb_button2['text'] = 'On'
                bulb_button2['image'] = buttonIconOn
                x = '$FE$FE$88$11$11$FF$FF$FF$FF$FF$FF$02$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$59$A7$FE$0D'
                if lista[1][0] == 1 and lista[1][1]:
                    getHexString = x.replace('$', '')
                if lista[1][0] == 2 and lista[1][1]:
                    x = '$FE$FE$91$11$11$FF$FF$FF$FF$FF$FF$01$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$E4$28$FE$0D'
                    getHexString = x.replace('$', '')
                print("wypisz ciag szesnastowy ", getHexString)
                binaryNotation = bytearray.fromhex(getHexString)
                print("wypisz ciag binarny ", binaryNotation)
                ser.write(binaryNotation)

            else:
                bulb_button2['text'] = 'Off'
                bulb_button2['image'] = buttonIconOff
                x = '$FE$FE$89$11$11$FF$FF$FF$FF$FF$FF$02$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$6C$1C$FE$0D'
                getHexString = x.replace('$', '')
                print("wypisz ciag szesnastowy ", getHexString)
                binaryNotation = bytearray.fromhex(getHexString)
                print("wypisz ciag binarny ", binaryNotation)
                ser.write(binaryNotation)

        def button3click():
            if (bulb_button3['text'] == 'Off'):
                bulb_button3['text'] = 'On'
                bulb_button3['image'] = buttonIconOn
                x = '$FE$FE$91$11$11$FF$FF$FF$FF$FF$FF$03$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$0D$56$FE$0D'

                komenda = x.replace('$', '')
                print("test dupa: ", lista)
                OutFrame(lista[3][0], '1111', lista[3][1])
                today = datetime.now()
                dt_string = today.strftime("%d/%m/%Y %H:%M:%S")

            else:
                bulb_button3['text'] = 'Off'
                bulb_button3['image'] = buttonIconOff
                x = '$FE$FE$91$11$11$FF$FF$FF$FF$FF$FF$03$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$0D$56$FE$0D'

                komenda = x.replace('$', '')
                today = datetime.now()
                dt_string = today.strftime("%d/%m/%Y %H:%M:%S")

        def button4click():
            if (bulb_button4['text'] == 'Off'):
                bulb_button4['text'] = 'On'
                bulb_button4['image'] = buttonIconOn
                OutFrame(lista[4][0], '1111', lista[4][1])
                today = datetime.now()
                dt_string = today.strftime("%d/%m/%Y %H:%M:%S")

            else:
                bulb_button4['text'] = 'Off'
                bulb_button4['image'] = buttonIconOff
                today = datetime.now()
                dt_string = today.strftime("%d/%m/%Y %H:%M:%S")

        def button5click():
            if (bulb_button5['text'] == 'Off'):
                bulb_button5['text'] = 'On'
                bulb_button5['image'] = buttonIconOn
                OutFrame(lista[5][0], '1111', lista[5][1])
                today = datetime.now()
                dt_string = today.strftime("%d/%m/%Y %H:%M:%S")

            else:
                bulb_button5['text'] = 'Off'
                bulb_button5['image'] = buttonIconOff
                today = datetime.now()
                dt_string = today.strftime("%d/%m/%Y %H:%M:%S")

        def button6click():
            if (bulb_button6['text'] == 'Off'):
                bulb_button6['text'] = 'On'
                bulb_button6['image'] = buttonIconOn
                OutFrame(lista[6][0], '1111', lista[6][1])
                today = datetime.now()
                dt_string = today.strftime("%d/%m/%Y %H:%M:%S")

            else:
                bulb_button6['text'] = 'Off'
                bulb_button6['image'] = buttonIconOff
                today = datetime.now()
                dt_string = today.strftime("%d/%m/%Y %H:%M:%S")

        def button7click():
            if (bulb_button7['text'] == 'Off'):
                bulb_button7['text'] = 'On'
                bulb_button7['image'] = buttonIconOn
                OutFrame(lista[7][0], '1111', lista[7][1])
                today = datetime.now()
                dt_string = today.strftime("%d/%m/%Y %H:%M:%S")

            else:
                bulb_button7['text'] = 'Off'
                bulb_button7['image'] = buttonIconOff
                today = datetime.now()
                dt_string = today.strftime("%d/%m/%Y %H:%M:%S")

        def button8click():
            if (bulb_button8['text'] == 'Off'):
                bulb_button8['text'] = 'On'
                bulb_button8['image'] = buttonIconOn
                OutFrame(lista[8][0], '1111', lista[8][1])
                today = datetime.now()
                dt_string = today.strftime("%d/%m/%Y %H:%M:%S")

            else:
                bulb_button8['text'] = 'Off'
                bulb_button8['image'] = buttonIconOff
                today = datetime.now()
                dt_string = today.strftime("%d/%m/%Y %H:%M:%S")

        bulb_button1 = ttk.Button(master=outs_frame, text='Off', image=buttonIcon,
                                  compound=tk.BOTTOM, command=button1click)
        bulb_button1.grid(row=0, column=0, sticky='')

        bulb_button2 = ttk.Button(master=outs_frame, text='Off', image=buttonIcon,
                                  compound=tk.BOTTOM, command=button2click)
        bulb_button2.grid(row=0, column=1, sticky='')

        bulb_button3 = ttk.Button(master=outs_frame, text='Off', image=buttonIcon,
                                  compound=tk.BOTTOM, command=button3click)
        bulb_button3.grid(row=0, column=2, sticky='')

        bulb_button4 = ttk.Button(master=outs_frame, text='Off', image=buttonIcon,
                                  compound=tk.BOTTOM, command=button4click)
        bulb_button4.grid(row=0, column=3, sticky='')

        bulb_button5 = ttk.Button(master=outs_frame, text='Off', image=buttonIcon,
                                  compound=tk.BOTTOM, command=button5click)
        bulb_button5.grid(row=1, column=0, sticky='')

        bulb_button6 = ttk.Button(master=outs_frame, text='Off', image=buttonIcon,
                                  compound=tk.BOTTOM, command=button6click)
        bulb_button6.grid(row=1, column=1, sticky='')

        bulb_button7 = ttk.Button(master=outs_frame, text='Off', image=buttonIcon,
                                  compound=tk.BOTTOM, command=button7click)
        bulb_button7.grid(row=1, column=2, sticky='')

        bulb_button8 = ttk.Button(master=outs_frame, text='Off', image=buttonIcon,
                                  compound=tk.BOTTOM, command=button8click)
        bulb_button8.grid(row=1, column=3, sticky='')


class PageOne(tk.Frame):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)

        self.outs_cfg_frame = tk.LabelFrame(self, height=500, width=620,
                                            text='   USTAWIENIA WYJŚCIA  ', font=LARGE_FONT
                                            )
        self.outs_cfg_frame.grid_propagate(False)
        self.outs_cfg_frame.grid(row=0, rowspan=2, column=0, sticky='', ipadx=12, padx=10, pady=10)
        self.outs_cfg_frame.grid_rowconfigure(0, weight=1)
        self.outs_cfg_frame.grid_rowconfigure(1, weight=1)
        self.outs_cfg_frame.grid_rowconfigure(2, weight=1)
        self.outs_cfg_frame.grid_columnconfigure(0, weight=1)
        self.outs_cfg_frame.grid_columnconfigure(1, weight=1)

        self.nr_button = tk.LabelFrame(master=self.outs_cfg_frame, text=' KONFIGURACJA PRZYCISKU   ', font=MID_FONT,
                                       labelanchor='n')
        self.nr_button.grid(row=0, column=1, sticky='nsew', padx=10, pady=10)

        vlist = {"OUT_1": 0, "OUT_2": 1, "OUT_3": 2, "OUT_4": 3, "OUT_5": 4, "OUT_6": 5, "OUT_7": 6, "OUT_8": 7}

        Combo = ttk.Combobox(master=self.nr_button, values=list(vlist.keys()))
        Combo.set("WYBIERZ PRZYCISK")

        def on_select_first_value(event):
            selected_value = Combo.get()
            global zmienna
            zmienna = vlist.get(selected_value)
            print("Wybrana wartość: ", selected_value)

        Combo.bind("<<ComboboxSelected>>", on_select_first_value)

        Combo.grid(row=0, column=0, sticky='', padx=20, pady=20)
        self.funkcja = tk.LabelFrame(master=self.outs_cfg_frame, text='   FUNKCJA WYJŚCIA   ', font=MID_FONT,
                                     labelanchor='n')
        self.funkcja.grid(row=1, column=1, sticky='nsew', padx=10, pady=10)

        #akcja----------------------------------------------------------------------------------------------
        #akcja = ["ON", "OFF", "STATE SWIT3CH"]
        akcja = {"ON": 1, "STATE SWITCH": 2}
        Combo2 = ttk.Combobox(master=self.funkcja, values=list(akcja.keys()))
        Combo2.set("WYBIERZ FUNKCJE")

        def get_selected_value2(event):
            selected_value2 = Combo2.get()
            test = akcja.get(selected_value2)
            global value2
            value2 = test
            print("Wybrana wartość: ", test)

        Combo2.bind("<<ComboboxSelected>>", get_selected_value2)

        Combo2.grid(row=0, column=0, sticky='', padx=20, pady=20)

        self.wyj = tk.LabelFrame(master=self.outs_cfg_frame, text='   WYBIERZ NR WYJŚĆ CENTRALI   ', font=MID_FONT,
                                 labelanchor='n')
        self.wyj.grid(row=2, column=1, sticky='nsew', padx=10, pady=10)

        wyjscia = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]

        Combo3 = ttk.Combobox(master=self.wyj, values=wyjscia)
        Combo3.set("WYBIERZ WYJŚCIE")
        Combo3.grid(row=0, column=0, sticky='NSEW', padx=20, pady=20)

        def get_selected_value3(event):
            selected_value3 = Combo3.get()
            global value3
            value3 = int(selected_value3)
            print("Wybrana wartość: ", selected_value3)

        Combo3.bind("<<ComboboxSelected>>", get_selected_value3)

        def saveParameters():
            lista[zmienna][0] = value2
            lista[zmienna][1] = value3

        saveButton = Button(master=self.wyj, text="Zapisz wybrane parametry", command=saveParameters)
        saveButton.grid(row=1, column=0, sticky='', pady=20)

        self.IconOn = tk.PhotoImage(file='UI/images/bulbon1.png')

        out_im = tk.Label(master=self.outs_cfg_frame, image=self.IconOn)
        out_im.grid(row=0, column=0, rowspan=3, sticky='', padx=20, pady=20)

        self.right_bar = ttk.Frame(self, width=140, height=520)
        self.right_bar.grid(row=0, column=1, sticky='nsew')

        self.buttonIconOUTs = tk.PhotoImage(file='UI/images/bulbon3.png')
        button1 = ttk.Button(master=self.right_bar, text="OUT's",
                             image=self.buttonIconOUTs, compound='bottom',
                             command=lambda: controller.show_frame(StartPage))
        button1.grid(row=0, column=0, sticky='', pady=20)


app = Application()
app.eval('tk::PlaceWindow . center')

app.mainloop()