diff --git a/.idea/workspace.xml b/.idea/workspace.xml index f3fed0c..010d93d 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -84,6 +84,8 @@ + + @@ -106,6 +108,6 @@ - + \ No newline at end of file diff --git a/changelog-UC.txt b/changelog-UC.txt index 83368fe..66df564 100644 --- a/changelog-UC.txt +++ b/changelog-UC.txt @@ -40,3 +40,8 @@ 4.0 Alpha (Build 19353) - Ukończenie ustawień + +4.0 Alpha (Build 19354) +- Przeniesienie głównego modułu do folderu nadrzędnego zamiast pliku inicjacji +- Zmieniony sposób ładowania modułów +- Ulepszona obsługa wyjątków dla ładowania modułów diff --git a/components/__pycache__/dataprocess.cpython-38.pyc b/components/__pycache__/dataprocess.cpython-38.pyc deleted file mode 100644 index a1976a8..0000000 Binary files a/components/__pycache__/dataprocess.cpython-38.pyc and /dev/null differ diff --git a/components/__pycache__/dialog.cpython-38.pyc b/components/__pycache__/dialog.cpython-38.pyc deleted file mode 100644 index b077ec0..0000000 Binary files a/components/__pycache__/dialog.cpython-38.pyc and /dev/null differ diff --git a/components/__pycache__/format.cpython-38.pyc b/components/__pycache__/format.cpython-38.pyc deleted file mode 100644 index c19d02b..0000000 Binary files a/components/__pycache__/format.cpython-38.pyc and /dev/null differ diff --git a/components/__pycache__/load_config.cpython-38.pyc b/components/__pycache__/load_config.cpython-38.pyc deleted file mode 100644 index 974b39d..0000000 Binary files a/components/__pycache__/load_config.cpython-38.pyc and /dev/null differ diff --git a/components/__pycache__/load_format.cpython-38.pyc b/components/__pycache__/load_format.cpython-38.pyc deleted file mode 100644 index 4cfe6fa..0000000 Binary files a/components/__pycache__/load_format.cpython-38.pyc and /dev/null differ diff --git a/components/__pycache__/processing.cpython-38.pyc b/components/__pycache__/processing.cpython-38.pyc deleted file mode 100644 index 51255a3..0000000 Binary files a/components/__pycache__/processing.cpython-38.pyc and /dev/null differ diff --git a/components/main.py b/components/main.py deleted file mode 100644 index 2759a1a..0000000 --- a/components/main.py +++ /dev/null @@ -1,791 +0,0 @@ -""" -# GeneratorCSV -# Wersja 4.0 Experimental -# by Mateusz Skoczek -# luty 2019 - grudzień 2019 -# dla ZSP Sobolew - -# -# Główny plik składowy programu -# -""" - - - - - - - - -# -------------------------------------------- # Informacje o programie # -------------------------------------------- # - -Nazwa = 'GeneratorCSV' -Wersja = '4.0 Experimental' -LataPracy = '2019' -Autorzy = 'Mateusz Skoczek' - - - - - - - - -# ----------------------------------------- # Definicja kodów dialogowych # ------------------------------------------ # - -E003x01 = ["Nie podano lokalizacji plików do importu. (E003x01)", False] -E003x02 = ["Nie podano lokalizacji zapisu wygenerowanych plików. (E003x02)", False] - -E003x111 = ["Plik podany w sciezce 1 nie istnieje (E003x111)", False] -E003x112 = ["Plik podany w sciezce 2 nie istnieje (E003x112)", False] -E003x113 = ["Plik podany w sciezce 3 nie istnieje (E003x113)", False] -E003x114 = ["Plik podany w sciezce 4 nie istnieje (E003x114)", False] - -A001 = "Czy na pewno chcesz rozpocząć generowanie?\nProgram utworzy w podanej lokalizacji pliki 'email.csv' i 'office.csv'.\nJeżeli w podanej lokalizacji istnieją pliki o takich nazwach zostaną one nadpisane." - - - - - - - - -# ----------------------------------- # Import bibliotek zewnętrznych i modułów # ------------------------------------ # - -# Biblioteki zewnętrzne -import os as OS -import sys as SS - - - -# Moduły składowe programu -try: - import dialog as MDdlg -except ModuleNotFoundError: - print('Nie znaleziono modułu programu (dialog.py)\nNie można załadować programu\nKod błędu: E00x0001') - wait = input('Naciśnij ENTER aby wyjść') - SS.exit(0) - -try: - import load_config as MDlcg -except ModuleNotFoundError: - print('Nie znaleziono modułu programu (load_config.py)\nNie można załadować programu\nKod błędu: E00x0002') - wait = input('Naciśnij ENTER aby wyjść') - SS.exit(0) - -try: - import load_format as MDlfm -except ModuleNotFoundError: - print('Nie znaleziono modułu programu (load_format.py)\nNie można załadować programu\nKod błędu: E00x0003') - wait = input('Naciśnij ENTER aby wyjść') - SS.exit(0) -""" -try: - import processing as MDprc -except ModuleNotFoundError: - print('Nie znaleziono modułu programu (processing.py)\nNie można załadować programu\nKod błędu: E00x0004') - wait = input('Naciśnij ENTER aby wyjść') - SS.exit(0) -""" - - -# Biblioteki zewnętrzne interfejsu graficznego -from tkinter import filedialog as TKfld -from tkinter import ttk as TKttk -import tkinter as TK - - - - - - - - - -# ------------------------------------- # Uruchomienie interfejsu graficznego # -------------------------------------- # - -# Zmienne globalne środowiska graficznego -if int(MDlcg.read()[0]) == 1: - CiemnyMotyw = True -else: - CiemnyMotyw = False -SzerokoscOpisu = 17 -SzerokoscOpisu2 = 30 -SzerokoscOpisu3 = 10 -SzerokoscPola = 122 -SzerokoscPola2 = 107 -SzerokoscPola3 = 130 - - - -# Motyw -if CiemnyMotyw: - ZmienneMotywu = ['#1F1F1F', '#191919', '#B8B8B8', '#FFFFFF', '#404040', '#FFFFFF', '#1F1F1F', 1] -else: - ZmienneMotywu = ['#F0F0F0', '#D4D4D4', '#000000', '#000000', '#A6A6A6', '#000000', '#FFFFFF', 2] - -M_tlo = ZmienneMotywu[0] -M_tytultlo = ZmienneMotywu[1] -M_tytultext = ZmienneMotywu[2] -M_text = ZmienneMotywu[3] -M_przycisktlo = ZmienneMotywu[4] -M_przycisktext = ZmienneMotywu[5] -M_entrytlo = ZmienneMotywu[6] -M_framewielkosc = ZmienneMotywu[7] - - - -class Main(TK.Tk): - def __init__(self): - # Ustawienia okna - TK.Tk.__init__(self) - self.title(Nazwa + " " + Wersja) - self.resizable(width = False, height = False) - self.configure(bg = M_tlo) - - - # Tytuł - Tytul = TK.Label(self) - Tytul.config(text = Nazwa) - Tytul.config(width = 41) - Tytul.config(bg = M_tytultlo) - Tytul.config(fg = M_tytultext) - Tytul.config(font = ('Segoe UI Semilight', 30)) - Tytul.grid(row = 0) - - - # Frame1 - Pliki z danymi - Ramka1 = TK.LabelFrame(self) - Ramka1.config(text=' Pliki tekstowe zawierające dane (wymagany przynajmniej jeden) ') - Ramka1.config(borderwidth = M_framewielkosc) - Ramka1.config(bg = M_tlo) - Ramka1.config(fg = M_text) - Ramka1.grid(row = 1) - - - # Ścieżka pliku txt nr 1 - wiersz = 1 - text1 = TK.StringVar() - - Pole1Label = TK.Label(Ramka1) - Pole1Label.config(text = 'Plik z danymi (1)') - Pole1Label.config(width = SzerokoscOpisu) - Pole1Label.config(bg = M_tlo) - Pole1Label.config(fg = M_text) - Pole1Label.grid(row = wiersz, column = 0) - - Pole1 = TK.Entry(Ramka1) - Pole1.config(textvariable = text1) - Pole1.config(width = SzerokoscPola) - Pole1.config(bg = M_entrytlo) - Pole1.config(fg = M_text) - Pole1.grid(row = wiersz, column = 1) - - def Pole1BrowseDialog(): - Pole1Browse.filename = TKfld.askopenfilename(initialdir = "C:/", title = "Wybierz plik tekstowy z danymi", filetypes = (("Pliki txt", "*.txt"), ("Wszystkie pliki", "*.*"))) - Pole1.delete(0, 'end') - Pole1.insert(0, Pole1Browse.filename) - - Pole1Browse = TK.Button(Ramka1) - Pole1Browse.config(text = '...') - Pole1Browse.config(command = Pole1BrowseDialog) - Pole1Browse.config(bg = M_przycisktlo) - Pole1Browse.config(fg = M_przycisktext) - Pole1Browse.config(relief = 'flat') - Pole1Browse.config(activebackground = M_przycisktlo) - Pole1Browse.grid(row = wiersz, column = 2, padx=5, pady=3) - - - # Ścieżka pliku txt nr 2 - wiersz = 2 - text2 = TK.StringVar() - - Pole2Label = TK.Label(Ramka1) - Pole2Label.config(text = 'Plik z danymi (2)') - Pole2Label.config(width = SzerokoscOpisu) - Pole2Label.config(bg = M_tlo) - Pole2Label.config(fg = M_text) - Pole2Label.grid(row = wiersz, column = 0) - - Pole2 = TK.Entry(Ramka1) - Pole2.config(textvariable = text2) - Pole2.config(width = SzerokoscPola) - Pole2.config(bg = M_entrytlo) - Pole2.config(fg = M_text) - Pole2.grid(row = wiersz, column = 1) - - def Pole2BrowseDialog(): - Pole2Browse.filename = TKfld.askopenfilename(initialdir = "C:/", title = "Wybierz plik tekstowy z danymi", filetypes = (("Pliki txt", "*.txt"), ("Wszystkie pliki", "*.*"))) - Pole2.delete(0, 'end') - Pole2.insert(0, Pole2Browse.filename) - - Pole2Browse = TK.Button(Ramka1) - Pole2Browse.config(text = '...') - Pole2Browse.config(command = Pole2BrowseDialog) - Pole2Browse.config(bg = M_przycisktlo) - Pole2Browse.config(fg = M_przycisktext) - Pole2Browse.config(relief = 'flat') - Pole2Browse.config(activebackground = M_przycisktlo) - Pole2Browse.grid(row = wiersz, column = 2, padx = 5, pady = 3) - - # Ścieżka pliku txt nr 3 - wiersz = 3 - text3 = TK.StringVar() - - Pole3Label = TK.Label(Ramka1) - Pole3Label.config(text = 'Plik z danymi (3)') - Pole3Label.config(width = SzerokoscOpisu) - Pole3Label.config(bg = M_tlo) - Pole3Label.config(fg = M_text) - Pole3Label.grid(row = wiersz, column = 0) - - Pole3 = TK.Entry(Ramka1) - Pole3.config(textvariable = text3) - Pole3.config(width = SzerokoscPola) - Pole3.config(bg = M_entrytlo) - Pole3.config(fg = M_text) - Pole3.grid(row = wiersz, column = 1) - - def Pole3BrowseDialog(): - Pole3Browse.filename = TKfld.askopenfilename(initialdir = "C:/", title = "Wybierz plik tekstowy z danymi", filetypes = (("Pliki txt", "*.txt"), ("Wszystkie pliki", "*.*"))) - Pole3.delete(0, 'end') - Pole3.insert(0, Pole3Browse.filename) - - Pole3Browse = TK.Button(Ramka1) - Pole3Browse.config(text = '...') - Pole3Browse.config(command = Pole3BrowseDialog) - Pole3Browse.config(bg = M_przycisktlo) - Pole3Browse.config(fg = M_przycisktext) - Pole3Browse.config(relief = 'flat') - Pole3Browse.config(activebackground = M_przycisktlo) - Pole3Browse.grid(row = wiersz, column = 2, padx = 5, pady = 3) - - - # Frame2 - Dołącz pliki .csv - Ramka2 = TK.LabelFrame(self) - Ramka2.config(text = ' Dołącz pliki .csv (opcjonalne) ') - Ramka2.config(borderwidth = M_framewielkosc) - Ramka2.config(bg = M_tlo) - Ramka2.config(fg = M_text) - Ramka2.grid(row = 2) - - - # Sciezka do konta.csv - wiersz = 1 - textKonta = TK.StringVar() - - PoleKontaLabel = TK.Label(Ramka2) - PoleKontaLabel.config(text = 'Ściezka do pliku .csv dla poczty') - PoleKontaLabel.config(width = SzerokoscOpisu2) - PoleKontaLabel.config(bg = M_tlo) - PoleKontaLabel.config(fg = M_text) - PoleKontaLabel.grid(row = wiersz, column = 0) - - PoleKonta = TK.Entry(Ramka2) - PoleKonta.config(textvariable = textKonta) - PoleKonta.config(width = SzerokoscPola2) - PoleKonta.config(bg = M_entrytlo) - PoleKonta.config(fg = M_text) - PoleKonta.grid(row = wiersz, column = 1) - - def PoleKontaBrowseDialog(): - PoleKontaBrowse.filename = TKfld.askopenfilename(initialdir="C:/", title="Wybierz plik .csv dla poczty", filetypes=(("Pliki csv", "*.csv"), ("Wszystkie pliki", "*.*"))) - PoleKonta.delete(0, 'end') - PoleKonta.insert(0, PoleKontaBrowse.filename) - - PoleKontaBrowse = TK.Button(Ramka2) - PoleKontaBrowse.config(text = '...') - PoleKontaBrowse.config(command = PoleKontaBrowseDialog) - PoleKontaBrowse.config(bg = M_przycisktlo) - PoleKontaBrowse.config(fg = M_przycisktext) - PoleKontaBrowse.config(relief = 'flat') - PoleKontaBrowse.config(activebackground = M_przycisktlo) - PoleKontaBrowse.grid(row = wiersz, column = 2, padx = 5, pady = 3) - - - # Sciezka do office.csv - wiersz = 2 - textOffice = TK.StringVar() - - PoleOfficeLabel = TK.Label(Ramka2) - PoleOfficeLabel.config(text = 'Ściezka do pliku .csv dla office365') - PoleOfficeLabel.config(width = SzerokoscOpisu2) - PoleOfficeLabel.config(bg = M_tlo) - PoleOfficeLabel.config(fg = M_text) - PoleOfficeLabel.grid(row = wiersz, column = 0) - - PoleOffice = TK.Entry(Ramka2) - PoleOffice.config(textvariable = textOffice) - PoleOffice.config(width = SzerokoscPola2) - PoleOffice.config(bg = M_entrytlo) - PoleOffice.config(fg = M_text) - PoleOffice.grid(row = wiersz, column = 1) - - def PoleOfficeBrowseDialog(): - PoleOfficeBrowse.filename = TKfld.askopenfilename(initialdir = "C:/", title = "Wybierz plik .csv dla poczty", filetypes = (("Pliki csv", "*.csv"), ("Wszystkie pliki", "*.*"))) - PoleOffice.delete(0, 'end') - PoleOffice.insert(0, PoleOfficeBrowse.filename) - - PoleOfficeBrowse = TK.Button(Ramka2) - PoleOfficeBrowse.config(text = '...') - PoleOfficeBrowse.config(command = PoleKontaBrowseDialog) - PoleOfficeBrowse.config(bg = M_przycisktlo) - PoleOfficeBrowse.config(fg = M_przycisktext) - PoleOfficeBrowse.config(relief = 'flat') - PoleOfficeBrowse.config(activebackground = M_przycisktlo) - PoleOfficeBrowse.grid(row = wiersz, column = 2, padx = 5, pady = 3) - - - # Frame3 - Eksport - Ramka3 = TK.LabelFrame(self) - Ramka3.config(text=' Eksport ') - Ramka3.config(borderwidth = M_framewielkosc) - Ramka3.config(bg = M_tlo) - Ramka3.config(fg = M_text) - Ramka3.grid(row = 3) - - - # Sciezka do pliku poczty - wiersz = 1 - textKontaEksport = TK.StringVar() - - PoleKontaEksportLabel = TK.Label(Ramka3) - PoleKontaEksportLabel.config(text = 'Poczta') - PoleKontaEksportLabel.config(width = SzerokoscOpisu3) - PoleKontaEksportLabel.config(bg = M_tlo) - PoleKontaEksportLabel.config(fg = M_text) - PoleKontaEksportLabel.grid(row = wiersz, column = 0) - - PoleKontaEksport = TK.Entry(Ramka3) - PoleKontaEksport.config(textvariable = textKontaEksport) - PoleKontaEksport.config(width = SzerokoscPola3) - PoleKontaEksport.config(bg = M_entrytlo) - PoleKontaEksport.config(fg = M_text) - PoleKontaEksport.grid(row = wiersz, column = 1) - - def PoleKontaEksportBrowseDialog(): - PoleKontaEksportBrowse.filename = TKfld.saveasfilename(initialdir = "C:/", title = "Zapisz", filetypes = (("Pliki csv", "*.csv"), ("Wszystkie pliki", "*.*"))) - PoleKontaEksport.delete(0, 'end') - PoleKontaEksport.insert(0, PoleKontaEksportBrowse.filename) - - PoleKontaEksportBrowse = TK.Button(Ramka3) - PoleKontaEksportBrowse.config(text = '...') - PoleKontaEksportBrowse.config(command = PoleKontaEksportBrowseDialog) - PoleKontaEksportBrowse.config(bg = M_przycisktlo) - PoleKontaEksportBrowse.config(fg = M_przycisktext) - PoleKontaEksportBrowse.config(relief = 'flat') - PoleKontaEksportBrowse.config(activebackground = M_przycisktlo) - PoleKontaEksportBrowse.grid(row = wiersz, column = 2, padx = 5, pady = 3) - - # Sciezka do pliku office - wiersz = 2 - textOfficeEksport = TK.StringVar() - - PoleOfficeEksportLabel = TK.Label(Ramka3) - PoleOfficeEksportLabel.config(text = 'Office') - PoleOfficeEksportLabel.config(width = SzerokoscOpisu3) - PoleOfficeEksportLabel.config(bg = M_tlo) - PoleOfficeEksportLabel.config(fg = M_text) - PoleOfficeEksportLabel.grid(row = wiersz, column = 0) - - PoleOfficeEksport = TK.Entry(Ramka3) - PoleOfficeEksport.config(textvariable = textOfficeEksport) - PoleOfficeEksport.config(width = SzerokoscPola3) - PoleOfficeEksport.config(bg = M_entrytlo) - PoleOfficeEksport.config(fg = M_text) - PoleOfficeEksport.grid(row = wiersz, column = 1) - - def PoleOfficeEksportBrowseDialog(): - PoleOfficeEksportBrowse.filename = TKfld.saveasfilename(initialdir = "C:/", title = "Zapisz", filetypes = (("Pliki csv", "*.csv"), ("Wszystkie pliki", "*.*"))) - PoleOfficeEksport.delete(0, 'end') - PoleOfficeEksport.insert(0, PoleOfficeEksportBrowse.filename) - - PoleOfficeEksportBrowse = TK.Button(Ramka3) - PoleOfficeEksportBrowse.config(text = '...') - PoleOfficeEksportBrowse.config(command = PoleOfficeEksportBrowseDialog) - PoleOfficeEksportBrowse.config(bg = M_przycisktlo) - PoleOfficeEksportBrowse.config(fg = M_przycisktext) - PoleOfficeEksportBrowse.config(relief = 'flat') - PoleOfficeEksportBrowse.config(activebackground = M_przycisktlo) - PoleOfficeEksportBrowse.grid(row = wiersz, column = 2, padx = 5, pady = 3) - - # Przycisk START - def PathPreprocess(): - pass - - PrzyciskSTART = TK.Button(self) - PrzyciskSTART.config(text = 'START') - PrzyciskSTART.config(command = PathPreprocess) - PrzyciskSTART.config(width = 50) - PrzyciskSTART.config(bg = M_przycisktlo) - PrzyciskSTART.config(fg = M_przycisktext) - PrzyciskSTART.config(relief = 'flat') - PrzyciskSTART.config(activebackground = M_przycisktlo) - PrzyciskSTART.grid(row = 4, pady = 15) - - # Pasek dolny - PasekDolny = TK.LabelFrame(self) - PasekDolny.config(bd = 0) - PasekDolny.config(bg = M_tytultlo) - PasekDolny.config(fg = M_tytultext) - PasekDolny.grid(row=5) - - InfoLabel = TK.Label(PasekDolny) - InfoLabel.config(text = Nazwa + ' ' + Wersja + ' | © ' + Autorzy + ' ' + LataPracy + ' dla ZSP Sobolew') - InfoLabel.config(width = 107) - InfoLabel.config(justify = 'left') - InfoLabel.config(anchor='w') - InfoLabel.config(bg = M_tytultlo) - InfoLabel.config(fg = M_tytultext) - InfoLabel.grid(row = 0, column = 0) - - def InfoOpen(): - try: - x = open('.\instruction.txt') - except FileNotFoundError: - MDdlg.err(4) - else: - OS.system("notepad .\instruction.txt") - - PrzyciskINFO = TK.Button(PasekDolny) - PrzyciskINFO.config(text = 'Instrukcja') - PrzyciskINFO.config(command = InfoOpen) - PrzyciskINFO.config(bg = M_przycisktlo) - PrzyciskINFO.config(fg = M_przycisktext) - PrzyciskINFO.config(relief = 'flat') - PrzyciskINFO.config(activebackground = M_przycisktlo) - PrzyciskINFO.grid(row = 0, column = 1, padx = 5, pady = 5) - - PrzyciskUSTAWIENIA = TK.Button(PasekDolny) - PrzyciskUSTAWIENIA.config(text = 'Ustawienia') - PrzyciskUSTAWIENIA.config(command = self.settingsButton) - PrzyciskUSTAWIENIA.config(bg = M_przycisktlo) - PrzyciskUSTAWIENIA.config(fg = M_przycisktext) - PrzyciskUSTAWIENIA.config(relief = 'flat') - PrzyciskUSTAWIENIA.grid(row = 0, column = 2, padx = 5, pady = 5) - - def settingsButton(self): - self.child = Settings(self) - - def run(self): - self.mainloop() - -class Settings(TK.Toplevel): - def __init__(self, parent): - # Ustawienia okna - TK.Toplevel.__init__(self, parent) - self.title('Ustawienia') - self.resizable(width = False, height = False) - self.configure(bg = M_tlo) - - liczbawierszy = 0 - - # Tytuł - Tytul = TK.Label(self) - Tytul.config(text = 'Ustawienia') - Tytul.config(width = 40) - Tytul.config(bg = M_tytultlo) - Tytul.config(fg = M_tytultext) - Tytul.config(font = ('Segoe UI Semilight', 20)) - Tytul.grid(row = 0) - - - # Frame1 - Motyw - liczbawierszy += 1 - Ramka1 = TK.LabelFrame(self) - Ramka1.config(text = ' Motyw programu ') - Ramka1.config(bg = M_tlo) - Ramka1.config(fg = M_text) - Ramka1.config(borderwidth = M_framewielkosc) - Ramka1.grid(row = 1, pady = 5) - - - if int(MDlcg.read()[0]) == 1: - Motyw_list_set = 1 - else: - Motyw_list_set = 0 - Motyw_list = TKttk.Combobox(Ramka1) - Motyw_list.config(textvariable = TK.StringVar()) - Motyw_list.config(state = 'readonly') - Motyw_list.config(width = 93) - Motyw_list.grid(row = 0, pady = 5, padx = 5) - Motyw_list['values'] = ('Jasny', 'Ciemny') - Motyw_list.current(Motyw_list_set) - - - # Frame2 - Kodowanie - liczbawierszy += 1 - Ramka2 = TK.LabelFrame(self) - Ramka2.config(text = ' Kodowanie wyjściowe ') - Ramka2.config(bg = M_tlo) - Ramka2.config(fg = M_text) - Ramka2.config(borderwidth = M_framewielkosc) - Ramka2.grid(row = 2, pady = 5) - - Code_list = TKttk.Combobox(Ramka2) - Code_list.config(textvariable = TK.StringVar()) - Code_list.config(state = 'readonly') - Code_list.config(width = 93) - Code_list.grid(row = 0, pady = 5, padx = 5) - Code_list['values'] = ('utf-8') - Code_list.set(MDlcg.read()[1]) - - - # Frame3 - Format plików wejściowych - SzerokoscPolaWej = 35 - WysokoscPolaWej = 8 - - liczbawierszy += 1 - Ramka3 = TK.LabelFrame(self) - Ramka3.config(text = ' Format plików wejściowych ') - Ramka3.config(bg = M_tlo) - Ramka3.config(fg = M_text) - Ramka3.config(borderwidth = M_framewielkosc) - Ramka3.grid(row = 3, pady = 5) - - UczniowieLabel = TK.Label(Ramka3) - UczniowieLabel.config(text = 'Uczniowie') - UczniowieLabel.config(justify = 'center') - UczniowieLabel.config(bg = M_tlo) - UczniowieLabel.config(fg = M_text) - UczniowieLabel.grid(row = 0, column = 0) - - uczfmt = MDlfm.read()[0] - uczfmt = '\n'.join(uczfmt) - UczniowieFormat = TK.Text(Ramka3) - UczniowieFormat.config(width = SzerokoscPolaWej) - UczniowieFormat.config(height = WysokoscPolaWej) - UczniowieFormat.config(bg = M_entrytlo) - UczniowieFormat.config(fg = M_text) - UczniowieFormat.grid(row = 1, column = 0, padx = 5, pady = 5) - UczniowieFormat.insert(TK.END, uczfmt) - - NauczycieleLabel = TK.Label(Ramka3) - NauczycieleLabel.config(text = 'Nauczyciele') - NauczycieleLabel.config(justify = 'center') - NauczycieleLabel.config(bg = M_tlo) - NauczycieleLabel.config(fg = M_text) - NauczycieleLabel.grid(row = 0, column = 1) - - nczfmt = MDlfm.read()[1] - nczfmt = '\n'.join(nczfmt) - NauczycieleFormat = TK.Text(Ramka3) - NauczycieleFormat.config(width = SzerokoscPolaWej) - NauczycieleFormat.config(height = WysokoscPolaWej) - NauczycieleFormat.config(bg = M_entrytlo) - NauczycieleFormat.config(fg = M_text) - NauczycieleFormat.grid(row = 1, column = 1, padx = 5, pady = 5) - NauczycieleFormat.insert(TK.END, nczfmt) - - OpisFmt = TK.LabelFrame(Ramka3) - OpisFmt.config(bg=M_tlo) - OpisFmt.config(fg=M_text) - OpisFmt.config(borderwidth=0) - OpisFmt.grid(row=2, pady=5, columnspan=4) - - Opis1 = TK.Label(OpisFmt) - Opis1.config(text='Dozwolone znaki:') - Opis1.config(bg=M_tlo) - Opis1.config(fg=M_text) - Opis1.grid(row=0, columnspan=7) - - Opis2_1 = TK.Label(OpisFmt) - Opis2_1.config(text='K - Klasa') - Opis2_1.config(bg=M_tlo) - Opis2_1.config(fg=M_text) - Opis2_1.grid(row=1, column=0) - - Opis2_2 = TK.Label(OpisFmt) - Opis2_2.config(text='O - Oddzial') - Opis2_2.config(bg=M_tlo) - Opis2_2.config(fg=M_text) - Opis2_2.grid(row=1, column=1) - - Opis2_3 = TK.Label(OpisFmt) - Opis2_3.config(text='N - Nazwisko') - Opis2_3.config(bg=M_tlo) - Opis2_3.config(fg=M_text) - Opis2_3.grid(row=1, column=2) - - Opis2_4 = TK.Label(OpisFmt) - Opis2_4.config(text='I - Imię') - Opis2_4.config(bg=M_tlo) - Opis2_4.config(fg=M_text) - Opis2_4.grid(row=1, column=3) - - Opis2_5 = TK.Label(OpisFmt) - Opis2_5.config(text='L - Login') - Opis2_5.config(bg=M_tlo) - Opis2_5.config(fg=M_text) - Opis2_5.grid(row=1, column=4) - - Opis2_6 = TK.Label(OpisFmt) - Opis2_6.config(text = 'X - Dane nieznaczące') - Opis2_6.config(bg = M_tlo) - Opis2_6.config(fg = M_text) - Opis2_6.grid(row = 1, column = 5) - - Opis2_6 = TK.Label(OpisFmt) - Opis2_6.config(text='Q - Pusta linia') - Opis2_6.config(bg=M_tlo) - Opis2_6.config(fg=M_text) - Opis2_6.grid(row=1, column=6) - - Opis3 = TK.Label(OpisFmt) - Opis3.config(text='Pozostałe znaki oprócz cyfr i pozostałych liter') - Opis3.config(bg=M_tlo) - Opis3.config(fg=M_text) - Opis3.grid(row=2, columnspan = 7) - - - # Frame4 - Stałe - liczbawierszy += 1 - Ramka4 = TK.LabelFrame(self) - Ramka4.config(text = ' Ustawienia generowania ') - Ramka4.config(bg = M_tlo) - Ramka4.config(fg = M_text) - Ramka4.config(borderwidth = M_framewielkosc) - Ramka4.grid(row = 4, pady = 5) - - - # Długość liceum i branżowej - RamkaDl = TK.LabelFrame(Ramka4) - RamkaDl.config(bg = M_tlo) - RamkaDl.config(fg = M_text) - RamkaDl.config(borderwidth = 0) - RamkaDl.grid(row = 0, pady = 5, columnspan = 2) - - DlLicLabel = TK.Label(RamkaDl) - DlLicLabel.config(text = 'Lata nauki w liceum') - DlLicLabel.config(width = SzerokoscOpisu + 5) - DlLicLabel.config(bg = M_tlo) - DlLicLabel.config(fg = M_text) - DlLicLabel.grid(row = 0, column = 0) - - DlLicValue = TK.IntVar() - DlLicPole = TK.Spinbox(RamkaDl) - DlLicPole.config(textvariable = DlLicValue) - DlLicPole.config(from_ = 1, to = 10) - DlLicPole.config(width = 18) - DlLicPole.config(bg = M_entrytlo) - DlLicPole.config(fg = M_text) - DlLicPole.grid(row = 0, column = 1, padx = 5, pady = 5) - DlLicPole.delete(0, 'end') - DlLicPole.insert(0, int(MDlcg.read()[5])) - - DlBrLabel = TK.Label(RamkaDl) - DlBrLabel.config(text='Lata nauki w branżowej') - DlBrLabel.config(width = SzerokoscOpisu + 5) - DlBrLabel.config(bg = M_tlo) - DlBrLabel.config(fg = M_text) - DlBrLabel.grid(row = 0, column = 2) - - DlBrValue = TK.IntVar() - DlBrPole = TK.Spinbox(RamkaDl) - DlBrPole.config(textvariable = DlBrValue) - DlBrPole.config(from_ = 1, to=10) - DlBrPole.config(width = 18) - DlBrPole.config(bg = M_entrytlo) - DlBrPole.config(fg = M_text) - DlBrPole.grid(row = 0, column = 3, padx = 5, pady = 5) - DlBrPole.delete(0, 'end') - DlBrPole.insert(0, int(MDlcg.read()[6])) - - - # Domena - - DomenaLabel = TK.Label(Ramka4) - DomenaLabel.config(text = 'Domena') - DomenaLabel.config(width = SzerokoscOpisu + 5) - DomenaLabel.config(bg = M_tlo) - DomenaLabel.config(fg = M_text) - DomenaLabel.grid(row = 2, column = 0) - - text1 = TK.StringVar() - PoleDomena = TK.Entry(Ramka4) - PoleDomena.config(textvariable = text1) - PoleDomena.config(width = 69) - PoleDomena.config(bg = M_entrytlo) - PoleDomena.config(fg = M_text) - PoleDomena.grid(row = 2, column = 1, padx = 5, pady = 5) - PoleDomena.insert(0, MDlcg.read()[2]) - - - # Quota - - QuotaLabel = TK.Label(Ramka4) - QuotaLabel.config(text = 'Quota (MB)') - QuotaLabel.config(width = SzerokoscOpisu) - QuotaLabel.config(bg = M_tlo) - QuotaLabel.config(fg = M_text) - QuotaLabel.grid(row = 3, column = 0) - - value2 = TK.IntVar() - PoleQuota = TK.Spinbox(Ramka4) - PoleQuota.config(textvariable = value2) - PoleQuota.config(from_ = 1, to = 100000) - PoleQuota.config(width = 67) - PoleQuota.config(bg = M_entrytlo) - PoleQuota.config(fg = M_text) - PoleQuota.grid(row = 3, column = 1, padx = 5, pady = 5) - PoleQuota.delete(0, 'end') - PoleQuota.insert(0, int(MDlcg.read()[3])) - - - # Kraj - - KrajLabel = TK.Label(Ramka4) - KrajLabel.config(text = 'Kraj') - KrajLabel.config(width = SzerokoscOpisu + 5) - KrajLabel.config(bg = M_tlo) - KrajLabel.config(fg = M_text) - KrajLabel.grid(row = 4, column = 0) - - KrajValue = TK.StringVar() - KrajPole = TK.Entry(Ramka4) - KrajPole.config(textvariable = KrajValue) - KrajPole.config(width = 69) - KrajPole.config(bg = M_entrytlo) - KrajPole.config(fg = M_text) - KrajPole.grid(row = 4, column = 1, padx = 5, pady = 5) - KrajPole.insert(0, MDlcg.read()[4]) - - - # Przycisk ZAPISZ - def save(): - if MDdlg.ask(1): - motyw = Motyw_list.get() - if motyw == 'Jasny': - motyw = '0' - else: - motyw = '1' - kodowanie = Code_list.get() - uczniowiefmt = UczniowieFormat.get('1.0', 'end') - nauczycielefmt = NauczycieleFormat.get('1.0', 'end') - liclata = DlLicPole.get() - brlata = DlBrPole.get() - domena = PoleDomena.get() - quota = PoleQuota.get() - kraj = KrajPole.get() - SettingsToSave = [motyw, kodowanie, domena, quota, kraj, liclata, brlata] - FormatToSave = [uczniowiefmt, nauczycielefmt] - if MDlfm.edit(FormatToSave): - MDlcg.edit(SettingsToSave) - MDdlg.inf(0) - self.destroy() - else: - pass - PrzyciskZAPISZ = TK.Button(self) - PrzyciskZAPISZ.config(text = 'ZAPISZ') - PrzyciskZAPISZ.config(command = save) - PrzyciskZAPISZ.config(width = 50) - PrzyciskZAPISZ.config(bg = M_przycisktlo) - PrzyciskZAPISZ.config(fg = M_przycisktext) - PrzyciskZAPISZ.config(relief = 'flat') - PrzyciskZAPISZ.config(activebackground = M_przycisktlo) - PrzyciskZAPISZ.grid(row = liczbawierszy + 1, pady = 15) - - - -OknoGlowne = Main() -OknoGlowne.run() \ No newline at end of file diff --git a/components/processing.py b/components/processing.py deleted file mode 100644 index 12f2077..0000000 --- a/components/processing.py +++ /dev/null @@ -1,57 +0,0 @@ -#TODO -import dataprocess as MDdtp -import load_config as MDlcg -import dialog as MDdlg -import codecs as CD - -I002 = ['Operacja zakończona pomyślnie', False] - -def do(KontenerDanych, sciezkaExport): - KontenerEmail = [] - KontenerOffice = [] - for osoba in KontenerDanych: - if osoba[-1]: - Klasa = osoba[0] - Imie = osoba[2] - Inicjaly = Imie[0] - Nazwisko = '' - NazwiskoDoEmaila = '' - for x in osoba[1]: - Nazwisko += x + ' ' - NazwiskoDoEmaila += ('.' + x) - Inicjaly += x[0] - Nazwisko = Nazwisko[:-1] - ZnacznikKlasy = MDdtp.ctc(Klasa) - Login = osoba[3] - Adres = MDdtp.plr(Imie).lower() + MDdtp.plr(NazwiskoDoEmaila).lower() + ZnacznikKlasy + '@losobolew.pl' - Email = Adres + ',' + Login + ':' + MDdtp.plr(Inicjaly) + ',500' - Office = Adres + ',' + Imie + ',' + Nazwisko + ',' + Imie + ' ' + Nazwisko + ',uczeń,' + Klasa + ',,,,,,,,,Rzeczypospolita Polska' - KontenerEmail.append(Email) - KontenerOffice.append(Office) - else: - Imie = osoba[1] - Inicjaly = Imie[0] - Nazwisko = '' - NazwiskoDoEmaila = '' - for x in osoba[0]: - Nazwisko += x + ' ' - NazwiskoDoEmaila += ('.' + x) - Inicjaly += x[0] - Nazwisko = Nazwisko[:-1] - Login = osoba[2] - Adres = MDdtp.plr(Imie).lower() + MDdtp.plr(NazwiskoDoEmaila).lower() + '@losobolew.pl' - Email = Adres + ',' + Login + ':' + MDdtp.plr(Inicjaly) + ',500' - Office = Adres + ',' + Imie + ',' + Nazwisko + ',' + Imie + ' ' + Nazwisko + ',nauczyciel,,,,,,,,,,Rzeczpospolita Polska' - KontenerEmail.append(Email) - KontenerOffice.append(Office) - sciezkaEmail = sciezkaExport + '/email.csv' - sciezkaOffice = sciezkaExport + '/office.csv' - with CD.open(sciezkaEmail, 'w', MDlcg.read()[1]) as plikEmail: - for x in KontenerEmail: - plikEmail.writelines(x + '\n') - plikEmail.close() - with CD.open(sciezkaOffice, 'w', MDlcg.read()[1]) as plikOffice: - for x in KontenerOffice: - plikOffice.writelines(x + '\n') - plikOffice.close() - MDdlg.Inf(I002) \ No newline at end of file diff --git a/generator.py b/generator.py index b765a01..5d9ad7c 100644 --- a/generator.py +++ b/generator.py @@ -1,12 +1,12 @@ """ -# GeneratorCSV +# Generator CSV # Wersja 4.0 Experimental # by Mateusz Skoczek # luty 2019 - grudzień 2019 # dla ZSP Sobolew # -# Główny skrypt uruchamiający +# Główny plik programu # """ @@ -17,13 +17,779 @@ -# ----------------------------------------- # Uruchomienie głównego modułu # ----------------------------------------- # +# -------------------------------------------- # Informacje o programie # -------------------------------------------- # + +Nazwa = 'Generator CSV' +Wersja = '4.0 Experimental' +LataPracy = '2019' +Autorzy = 'Mateusz Skoczek' + + + + + + + + +# ----------------------------------- # Import bibliotek zewnętrznych i modułów # ------------------------------------ # + +# Biblioteki zewnętrzne +import os as OS +import sys as SS + + + +# Moduły składowe programu +try: + from modules import dialog as MDdlg +except ModuleNotFoundError: + print('Wystąpił krytyczny błąd!') + print('Nie znaleziono jednego z modułów programu (dialog.py). Nie można załadować programu') + print('Kod błędu: E00x0011') + wait = input('Naciśnij ENTER aby wyjść') + SS.exit(0) +except Exception as exc: + print('Wystąpił krytyczny błąd!') + print('Nieznany błąd podczas ładowania jednego z modułów programu (dialog.py). Nie można załadować programu.') + print('Treść błędu: ' + exc) + print('Kod błędu: E00x0010') + wait = input('Naciśnij ENTER aby wyjść') + SS.exit(0) try: - fck = open("components/main.py") -except: - print('Nie znaleziono głównego modułu programu (main.py)\nNie można załadować programu\nKod błędu: E00x0000') + from modules import load_config as MDlcg +except ModuleNotFoundError: + print('Wystąpił krytyczny błąd!') + print('Nie znaleziono jednego z modułów programu (load_config.py). Nie można załadować programu') + print('Kod błędu: E00x0021') wait = input('Naciśnij ENTER aby wyjść') + SS.exit(0) +except Exception as exc: + print('Wystąpił krytyczny błąd!') + print('Nieznany błąd podczas ładowania jednego z modułów programu (load_config.py). Nie można załadować programu.') + print('Treść błędu: ' + exc) + print('Kod błędu: E00x0020') + wait = input('Naciśnij ENTER aby wyjść') + SS.exit(0) + +try: + from modules import load_format as MDlfm +except ModuleNotFoundError: + print('Wystąpił krytyczny błąd!') + print('Nie znaleziono jednego z modułów programu (load_format.py). Nie można załadować programu') + print('Kod błędu: E00x0031') + wait = input('Naciśnij ENTER aby wyjść') + SS.exit(0) +except Exception as exc: + print('Wystąpił krytyczny błąd!') + print('Nieznany błąd podczas ładowania jednego z modułów programu (load_format.py). Nie można załadować programu.') + print('Treść błędu: ' + exc) + print('Kod błędu: E00x0030') + wait = input('Naciśnij ENTER aby wyjść') + SS.exit(0) + + +# Biblioteki zewnętrzne interfejsu graficznego +import tkinter as TK + +from tkinter import filedialog as TKfld +from tkinter import ttk as TKttk + + + + + + + + + +# ------------------------------------- # Uruchomienie interfejsu graficznego # -------------------------------------- # + +# Zmienne globalne środowiska graficznego +if int(MDlcg.read()[0]) == 1: + CiemnyMotyw = True else: - import os - os.system("components\main.py") \ No newline at end of file + CiemnyMotyw = False +SzerokoscOpisu = 17 +SzerokoscOpisu2 = 30 +SzerokoscOpisu3 = 10 +SzerokoscPola = 122 +SzerokoscPola2 = 107 +SzerokoscPola3 = 130 + + + +# Zmienne motywu +if CiemnyMotyw: + ZmienneMotywu = ['#1F1F1F', '#191919', '#B8B8B8', '#FFFFFF', '#404040', '#FFFFFF', '#1F1F1F', 1] +else: + ZmienneMotywu = ['#F0F0F0', '#D4D4D4', '#000000', '#000000', '#A6A6A6', '#000000', '#FFFFFF', 2] + +M_tlo = ZmienneMotywu[0] +M_tytultlo = ZmienneMotywu[1] +M_tytultext = ZmienneMotywu[2] +M_text = ZmienneMotywu[3] +M_przycisktlo = ZmienneMotywu[4] +M_przycisktext = ZmienneMotywu[5] +M_entrytlo = ZmienneMotywu[6] +M_framewielkosc = ZmienneMotywu[7] + + + +# Okno główne +class Main(TK.Tk): + def __init__(self): + # Ustawienia okna + TK.Tk.__init__(self) + self.title(Nazwa + " " + Wersja) + self.resizable(width = False, height = False) + self.configure(bg = M_tlo) + + + # Tytuł + Tytul = TK.Label(self) + Tytul.config(text = Nazwa) + Tytul.config(width = 41) + Tytul.config(bg = M_tytultlo) + Tytul.config(fg = M_tytultext) + Tytul.config(font = ('Segoe UI Semilight', 30)) + Tytul.grid(row = 0) + + + # Frame1 - Pliki z danymi + Ramka1 = TK.LabelFrame(self) + Ramka1.config(text=' Pliki tekstowe zawierające dane (wymagany przynajmniej jeden) ') + Ramka1.config(borderwidth = M_framewielkosc) + Ramka1.config(bg = M_tlo) + Ramka1.config(fg = M_text) + Ramka1.grid(row = 1) + + + # Ścieżka pliku txt nr 1 + wiersz = 1 + text1 = TK.StringVar() + + Pole1Label = TK.Label(Ramka1) + Pole1Label.config(text = 'Plik z danymi (1)') + Pole1Label.config(width = SzerokoscOpisu) + Pole1Label.config(bg = M_tlo) + Pole1Label.config(fg = M_text) + Pole1Label.grid(row = wiersz, column = 0) + + Pole1 = TK.Entry(Ramka1) + Pole1.config(textvariable = text1) + Pole1.config(width = SzerokoscPola) + Pole1.config(bg = M_entrytlo) + Pole1.config(fg = M_text) + Pole1.grid(row = wiersz, column = 1) + + def Pole1BrowseDialog(): + Pole1Browse.filename = TKfld.askopenfilename(initialdir = "C:/", title = "Wybierz plik tekstowy z danymi", filetypes = (("Pliki txt", "*.txt"), ("Wszystkie pliki", "*.*"))) + Pole1.delete(0, 'end') + Pole1.insert(0, Pole1Browse.filename) + + Pole1Browse = TK.Button(Ramka1) + Pole1Browse.config(text = '...') + Pole1Browse.config(command = Pole1BrowseDialog) + Pole1Browse.config(bg = M_przycisktlo) + Pole1Browse.config(fg = M_przycisktext) + Pole1Browse.config(relief = 'flat') + Pole1Browse.config(activebackground = M_przycisktlo) + Pole1Browse.grid(row = wiersz, column = 2, padx=5, pady=3) + + + # Ścieżka pliku txt nr 2 + wiersz = 2 + text2 = TK.StringVar() + + Pole2Label = TK.Label(Ramka1) + Pole2Label.config(text = 'Plik z danymi (2)') + Pole2Label.config(width = SzerokoscOpisu) + Pole2Label.config(bg = M_tlo) + Pole2Label.config(fg = M_text) + Pole2Label.grid(row = wiersz, column = 0) + + Pole2 = TK.Entry(Ramka1) + Pole2.config(textvariable = text2) + Pole2.config(width = SzerokoscPola) + Pole2.config(bg = M_entrytlo) + Pole2.config(fg = M_text) + Pole2.grid(row = wiersz, column = 1) + + def Pole2BrowseDialog(): + Pole2Browse.filename = TKfld.askopenfilename(initialdir = "C:/", title = "Wybierz plik tekstowy z danymi", filetypes = (("Pliki txt", "*.txt"), ("Wszystkie pliki", "*.*"))) + Pole2.delete(0, 'end') + Pole2.insert(0, Pole2Browse.filename) + + Pole2Browse = TK.Button(Ramka1) + Pole2Browse.config(text = '...') + Pole2Browse.config(command = Pole2BrowseDialog) + Pole2Browse.config(bg = M_przycisktlo) + Pole2Browse.config(fg = M_przycisktext) + Pole2Browse.config(relief = 'flat') + Pole2Browse.config(activebackground = M_przycisktlo) + Pole2Browse.grid(row = wiersz, column = 2, padx = 5, pady = 3) + + # Ścieżka pliku txt nr 3 + wiersz = 3 + text3 = TK.StringVar() + + Pole3Label = TK.Label(Ramka1) + Pole3Label.config(text = 'Plik z danymi (3)') + Pole3Label.config(width = SzerokoscOpisu) + Pole3Label.config(bg = M_tlo) + Pole3Label.config(fg = M_text) + Pole3Label.grid(row = wiersz, column = 0) + + Pole3 = TK.Entry(Ramka1) + Pole3.config(textvariable = text3) + Pole3.config(width = SzerokoscPola) + Pole3.config(bg = M_entrytlo) + Pole3.config(fg = M_text) + Pole3.grid(row = wiersz, column = 1) + + def Pole3BrowseDialog(): + Pole3Browse.filename = TKfld.askopenfilename(initialdir = "C:/", title = "Wybierz plik tekstowy z danymi", filetypes = (("Pliki txt", "*.txt"), ("Wszystkie pliki", "*.*"))) + Pole3.delete(0, 'end') + Pole3.insert(0, Pole3Browse.filename) + + Pole3Browse = TK.Button(Ramka1) + Pole3Browse.config(text = '...') + Pole3Browse.config(command = Pole3BrowseDialog) + Pole3Browse.config(bg = M_przycisktlo) + Pole3Browse.config(fg = M_przycisktext) + Pole3Browse.config(relief = 'flat') + Pole3Browse.config(activebackground = M_przycisktlo) + Pole3Browse.grid(row = wiersz, column = 2, padx = 5, pady = 3) + + + # Frame2 - Dołącz pliki .csv + Ramka2 = TK.LabelFrame(self) + Ramka2.config(text = ' Dołącz pliki .csv (opcjonalne) ') + Ramka2.config(borderwidth = M_framewielkosc) + Ramka2.config(bg = M_tlo) + Ramka2.config(fg = M_text) + Ramka2.grid(row = 2) + + + # Sciezka do konta.csv + wiersz = 1 + textKonta = TK.StringVar() + + PoleKontaLabel = TK.Label(Ramka2) + PoleKontaLabel.config(text = 'Ściezka do pliku .csv dla poczty') + PoleKontaLabel.config(width = SzerokoscOpisu2) + PoleKontaLabel.config(bg = M_tlo) + PoleKontaLabel.config(fg = M_text) + PoleKontaLabel.grid(row = wiersz, column = 0) + + PoleKonta = TK.Entry(Ramka2) + PoleKonta.config(textvariable = textKonta) + PoleKonta.config(width = SzerokoscPola2) + PoleKonta.config(bg = M_entrytlo) + PoleKonta.config(fg = M_text) + PoleKonta.grid(row = wiersz, column = 1) + + def PoleKontaBrowseDialog(): + PoleKontaBrowse.filename = TKfld.askopenfilename(initialdir="C:/", title="Wybierz plik .csv dla poczty", filetypes=(("Pliki csv", "*.csv"), ("Wszystkie pliki", "*.*"))) + PoleKonta.delete(0, 'end') + PoleKonta.insert(0, PoleKontaBrowse.filename) + + PoleKontaBrowse = TK.Button(Ramka2) + PoleKontaBrowse.config(text = '...') + PoleKontaBrowse.config(command = PoleKontaBrowseDialog) + PoleKontaBrowse.config(bg = M_przycisktlo) + PoleKontaBrowse.config(fg = M_przycisktext) + PoleKontaBrowse.config(relief = 'flat') + PoleKontaBrowse.config(activebackground = M_przycisktlo) + PoleKontaBrowse.grid(row = wiersz, column = 2, padx = 5, pady = 3) + + + # Sciezka do office.csv + wiersz = 2 + textOffice = TK.StringVar() + + PoleOfficeLabel = TK.Label(Ramka2) + PoleOfficeLabel.config(text = 'Ściezka do pliku .csv dla office365') + PoleOfficeLabel.config(width = SzerokoscOpisu2) + PoleOfficeLabel.config(bg = M_tlo) + PoleOfficeLabel.config(fg = M_text) + PoleOfficeLabel.grid(row = wiersz, column = 0) + + PoleOffice = TK.Entry(Ramka2) + PoleOffice.config(textvariable = textOffice) + PoleOffice.config(width = SzerokoscPola2) + PoleOffice.config(bg = M_entrytlo) + PoleOffice.config(fg = M_text) + PoleOffice.grid(row = wiersz, column = 1) + + def PoleOfficeBrowseDialog(): + PoleOfficeBrowse.filename = TKfld.askopenfilename(initialdir = "C:/", title = "Wybierz plik .csv dla poczty", filetypes = (("Pliki csv", "*.csv"), ("Wszystkie pliki", "*.*"))) + PoleOffice.delete(0, 'end') + PoleOffice.insert(0, PoleOfficeBrowse.filename) + + PoleOfficeBrowse = TK.Button(Ramka2) + PoleOfficeBrowse.config(text = '...') + PoleOfficeBrowse.config(command = PoleKontaBrowseDialog) + PoleOfficeBrowse.config(bg = M_przycisktlo) + PoleOfficeBrowse.config(fg = M_przycisktext) + PoleOfficeBrowse.config(relief = 'flat') + PoleOfficeBrowse.config(activebackground = M_przycisktlo) + PoleOfficeBrowse.grid(row = wiersz, column = 2, padx = 5, pady = 3) + + + # Frame3 - Eksport + Ramka3 = TK.LabelFrame(self) + Ramka3.config(text=' Eksport ') + Ramka3.config(borderwidth = M_framewielkosc) + Ramka3.config(bg = M_tlo) + Ramka3.config(fg = M_text) + Ramka3.grid(row = 3) + + + # Sciezka do pliku poczty + wiersz = 1 + textKontaEksport = TK.StringVar() + + PoleKontaEksportLabel = TK.Label(Ramka3) + PoleKontaEksportLabel.config(text = 'Poczta') + PoleKontaEksportLabel.config(width = SzerokoscOpisu3) + PoleKontaEksportLabel.config(bg = M_tlo) + PoleKontaEksportLabel.config(fg = M_text) + PoleKontaEksportLabel.grid(row = wiersz, column = 0) + + PoleKontaEksport = TK.Entry(Ramka3) + PoleKontaEksport.config(textvariable = textKontaEksport) + PoleKontaEksport.config(width = SzerokoscPola3) + PoleKontaEksport.config(bg = M_entrytlo) + PoleKontaEksport.config(fg = M_text) + PoleKontaEksport.grid(row = wiersz, column = 1) + + def PoleKontaEksportBrowseDialog(): + PoleKontaEksportBrowse.filename = TKfld.saveasfilename(initialdir = "C:/", title = "Zapisz", filetypes = (("Pliki csv", "*.csv"), ("Wszystkie pliki", "*.*"))) + PoleKontaEksport.delete(0, 'end') + PoleKontaEksport.insert(0, PoleKontaEksportBrowse.filename) + + PoleKontaEksportBrowse = TK.Button(Ramka3) + PoleKontaEksportBrowse.config(text = '...') + PoleKontaEksportBrowse.config(command = PoleKontaEksportBrowseDialog) + PoleKontaEksportBrowse.config(bg = M_przycisktlo) + PoleKontaEksportBrowse.config(fg = M_przycisktext) + PoleKontaEksportBrowse.config(relief = 'flat') + PoleKontaEksportBrowse.config(activebackground = M_przycisktlo) + PoleKontaEksportBrowse.grid(row = wiersz, column = 2, padx = 5, pady = 3) + + # Sciezka do pliku office + wiersz = 2 + textOfficeEksport = TK.StringVar() + + PoleOfficeEksportLabel = TK.Label(Ramka3) + PoleOfficeEksportLabel.config(text = 'Office') + PoleOfficeEksportLabel.config(width = SzerokoscOpisu3) + PoleOfficeEksportLabel.config(bg = M_tlo) + PoleOfficeEksportLabel.config(fg = M_text) + PoleOfficeEksportLabel.grid(row = wiersz, column = 0) + + PoleOfficeEksport = TK.Entry(Ramka3) + PoleOfficeEksport.config(textvariable = textOfficeEksport) + PoleOfficeEksport.config(width = SzerokoscPola3) + PoleOfficeEksport.config(bg = M_entrytlo) + PoleOfficeEksport.config(fg = M_text) + PoleOfficeEksport.grid(row = wiersz, column = 1) + + def PoleOfficeEksportBrowseDialog(): + PoleOfficeEksportBrowse.filename = TKfld.saveasfilename(initialdir = "C:/", title = "Zapisz", filetypes = (("Pliki csv", "*.csv"), ("Wszystkie pliki", "*.*"))) + PoleOfficeEksport.delete(0, 'end') + PoleOfficeEksport.insert(0, PoleOfficeEksportBrowse.filename) + + PoleOfficeEksportBrowse = TK.Button(Ramka3) + PoleOfficeEksportBrowse.config(text = '...') + PoleOfficeEksportBrowse.config(command = PoleOfficeEksportBrowseDialog) + PoleOfficeEksportBrowse.config(bg = M_przycisktlo) + PoleOfficeEksportBrowse.config(fg = M_przycisktext) + PoleOfficeEksportBrowse.config(relief = 'flat') + PoleOfficeEksportBrowse.config(activebackground = M_przycisktlo) + PoleOfficeEksportBrowse.grid(row = wiersz, column = 2, padx = 5, pady = 3) + + # Przycisk START + def PathPreprocess(): + pass + + PrzyciskSTART = TK.Button(self) + PrzyciskSTART.config(text = 'START') + PrzyciskSTART.config(command = PathPreprocess) + PrzyciskSTART.config(width = 50) + PrzyciskSTART.config(bg = M_przycisktlo) + PrzyciskSTART.config(fg = M_przycisktext) + PrzyciskSTART.config(relief = 'flat') + PrzyciskSTART.config(activebackground = M_przycisktlo) + PrzyciskSTART.grid(row = 4, pady = 15) + + # Pasek dolny + PasekDolny = TK.LabelFrame(self) + PasekDolny.config(bd = 0) + PasekDolny.config(bg = M_tytultlo) + PasekDolny.config(fg = M_tytultext) + PasekDolny.grid(row=5) + + InfoLabel = TK.Label(PasekDolny) + InfoLabel.config(text = Nazwa + ' ' + Wersja + ' | © ' + Autorzy + ' ' + LataPracy + ' dla ZSP Sobolew') + InfoLabel.config(width = 107) + InfoLabel.config(justify = 'left') + InfoLabel.config(anchor='w') + InfoLabel.config(bg = M_tytultlo) + InfoLabel.config(fg = M_tytultext) + InfoLabel.grid(row = 0, column = 0) + + def InfoOpen(): + try: + x = open('.\instruction.txt') + except FileNotFoundError: + MDdlg.err(4) + else: + OS.system("notepad .\instruction.txt") + + PrzyciskINFO = TK.Button(PasekDolny) + PrzyciskINFO.config(text = 'Instrukcja') + PrzyciskINFO.config(command = InfoOpen) + PrzyciskINFO.config(bg = M_przycisktlo) + PrzyciskINFO.config(fg = M_przycisktext) + PrzyciskINFO.config(relief = 'flat') + PrzyciskINFO.config(activebackground = M_przycisktlo) + PrzyciskINFO.grid(row = 0, column = 1, padx = 5, pady = 5) + + PrzyciskUSTAWIENIA = TK.Button(PasekDolny) + PrzyciskUSTAWIENIA.config(text = 'Ustawienia') + PrzyciskUSTAWIENIA.config(command = self.settingsButton) + PrzyciskUSTAWIENIA.config(bg = M_przycisktlo) + PrzyciskUSTAWIENIA.config(fg = M_przycisktext) + PrzyciskUSTAWIENIA.config(relief = 'flat') + PrzyciskUSTAWIENIA.grid(row = 0, column = 2, padx = 5, pady = 5) + + def settingsButton(self): + self.child = Settings(self) + + def run(self): + self.mainloop() + +# Okno ustawień +class Settings(TK.Toplevel): + def __init__(self, parent): + # Ustawienia okna + TK.Toplevel.__init__(self, parent) + self.title('Ustawienia') + self.resizable(width = False, height = False) + self.configure(bg = M_tlo) + + liczbawierszy = 0 + + # Tytuł + Tytul = TK.Label(self) + Tytul.config(text = 'Ustawienia') + Tytul.config(width = 40) + Tytul.config(bg = M_tytultlo) + Tytul.config(fg = M_tytultext) + Tytul.config(font = ('Segoe UI Semilight', 20)) + Tytul.grid(row = 0) + + + # Frame1 - Motyw + liczbawierszy += 1 + Ramka1 = TK.LabelFrame(self) + Ramka1.config(text = ' Motyw programu ') + Ramka1.config(bg = M_tlo) + Ramka1.config(fg = M_text) + Ramka1.config(borderwidth = M_framewielkosc) + Ramka1.grid(row = 1, pady = 5) + + + if int(MDlcg.read()[0]) == 1: + Motyw_list_set = 1 + else: + Motyw_list_set = 0 + Motyw_list = TKttk.Combobox(Ramka1) + Motyw_list.config(textvariable = TK.StringVar()) + Motyw_list.config(state = 'readonly') + Motyw_list.config(width = 93) + Motyw_list.grid(row = 0, pady = 5, padx = 5) + Motyw_list['values'] = ('Jasny', 'Ciemny') + Motyw_list.current(Motyw_list_set) + + + # Frame2 - Kodowanie + liczbawierszy += 1 + Ramka2 = TK.LabelFrame(self) + Ramka2.config(text = ' Kodowanie wyjściowe ') + Ramka2.config(bg = M_tlo) + Ramka2.config(fg = M_text) + Ramka2.config(borderwidth = M_framewielkosc) + Ramka2.grid(row = 2, pady = 5) + + Code_list = TKttk.Combobox(Ramka2) + Code_list.config(textvariable = TK.StringVar()) + Code_list.config(state = 'readonly') + Code_list.config(width = 93) + Code_list.grid(row = 0, pady = 5, padx = 5) + Code_list['values'] = ('utf-8') + Code_list.set(MDlcg.read()[1]) + + + # Frame3 - Format plików wejściowych + SzerokoscPolaWej = 35 + WysokoscPolaWej = 8 + + liczbawierszy += 1 + Ramka3 = TK.LabelFrame(self) + Ramka3.config(text = ' Format plików wejściowych ') + Ramka3.config(bg = M_tlo) + Ramka3.config(fg = M_text) + Ramka3.config(borderwidth = M_framewielkosc) + Ramka3.grid(row = 3, pady = 5) + + UczniowieLabel = TK.Label(Ramka3) + UczniowieLabel.config(text = 'Uczniowie') + UczniowieLabel.config(justify = 'center') + UczniowieLabel.config(bg = M_tlo) + UczniowieLabel.config(fg = M_text) + UczniowieLabel.grid(row = 0, column = 0) + + uczfmt = MDlfm.read()[0] + uczfmt = '\n'.join(uczfmt) + UczniowieFormat = TK.Text(Ramka3) + UczniowieFormat.config(width = SzerokoscPolaWej) + UczniowieFormat.config(height = WysokoscPolaWej) + UczniowieFormat.config(bg = M_entrytlo) + UczniowieFormat.config(fg = M_text) + UczniowieFormat.grid(row = 1, column = 0, padx = 5, pady = 5) + UczniowieFormat.insert(TK.END, uczfmt) + + NauczycieleLabel = TK.Label(Ramka3) + NauczycieleLabel.config(text = 'Nauczyciele') + NauczycieleLabel.config(justify = 'center') + NauczycieleLabel.config(bg = M_tlo) + NauczycieleLabel.config(fg = M_text) + NauczycieleLabel.grid(row = 0, column = 1) + + nczfmt = MDlfm.read()[1] + nczfmt = '\n'.join(nczfmt) + NauczycieleFormat = TK.Text(Ramka3) + NauczycieleFormat.config(width = SzerokoscPolaWej) + NauczycieleFormat.config(height = WysokoscPolaWej) + NauczycieleFormat.config(bg = M_entrytlo) + NauczycieleFormat.config(fg = M_text) + NauczycieleFormat.grid(row = 1, column = 1, padx = 5, pady = 5) + NauczycieleFormat.insert(TK.END, nczfmt) + + OpisFmt = TK.LabelFrame(Ramka3) + OpisFmt.config(bg=M_tlo) + OpisFmt.config(fg=M_text) + OpisFmt.config(borderwidth=0) + OpisFmt.grid(row=2, pady=5, columnspan=4) + + Opis1 = TK.Label(OpisFmt) + Opis1.config(text='Dozwolone znaki:') + Opis1.config(bg=M_tlo) + Opis1.config(fg=M_text) + Opis1.grid(row=0, columnspan=7) + + Opis2_1 = TK.Label(OpisFmt) + Opis2_1.config(text='K - Klasa') + Opis2_1.config(bg=M_tlo) + Opis2_1.config(fg=M_text) + Opis2_1.grid(row=1, column=0) + + Opis2_2 = TK.Label(OpisFmt) + Opis2_2.config(text='O - Oddzial') + Opis2_2.config(bg=M_tlo) + Opis2_2.config(fg=M_text) + Opis2_2.grid(row=1, column=1) + + Opis2_3 = TK.Label(OpisFmt) + Opis2_3.config(text='N - Nazwisko') + Opis2_3.config(bg=M_tlo) + Opis2_3.config(fg=M_text) + Opis2_3.grid(row=1, column=2) + + Opis2_4 = TK.Label(OpisFmt) + Opis2_4.config(text='I - Imię') + Opis2_4.config(bg=M_tlo) + Opis2_4.config(fg=M_text) + Opis2_4.grid(row=1, column=3) + + Opis2_5 = TK.Label(OpisFmt) + Opis2_5.config(text='L - Login') + Opis2_5.config(bg=M_tlo) + Opis2_5.config(fg=M_text) + Opis2_5.grid(row=1, column=4) + + Opis2_6 = TK.Label(OpisFmt) + Opis2_6.config(text = 'X - Dane nieznaczące') + Opis2_6.config(bg = M_tlo) + Opis2_6.config(fg = M_text) + Opis2_6.grid(row = 1, column = 5) + + Opis2_6 = TK.Label(OpisFmt) + Opis2_6.config(text='Q - Pusta linia') + Opis2_6.config(bg=M_tlo) + Opis2_6.config(fg=M_text) + Opis2_6.grid(row=1, column=6) + + Opis3 = TK.Label(OpisFmt) + Opis3.config(text='Pozostałe znaki oprócz cyfr i pozostałych liter') + Opis3.config(bg=M_tlo) + Opis3.config(fg=M_text) + Opis3.grid(row=2, columnspan = 7) + + + # Frame4 - Stałe + liczbawierszy += 1 + Ramka4 = TK.LabelFrame(self) + Ramka4.config(text = ' Ustawienia generowania ') + Ramka4.config(bg = M_tlo) + Ramka4.config(fg = M_text) + Ramka4.config(borderwidth = M_framewielkosc) + Ramka4.grid(row = 4, pady = 5) + + + # Długość liceum i branżowej + RamkaDl = TK.LabelFrame(Ramka4) + RamkaDl.config(bg = M_tlo) + RamkaDl.config(fg = M_text) + RamkaDl.config(borderwidth = 0) + RamkaDl.grid(row = 0, pady = 5, columnspan = 2) + + DlLicLabel = TK.Label(RamkaDl) + DlLicLabel.config(text = 'Lata nauki w liceum') + DlLicLabel.config(width = SzerokoscOpisu + 5) + DlLicLabel.config(bg = M_tlo) + DlLicLabel.config(fg = M_text) + DlLicLabel.grid(row = 0, column = 0) + + DlLicValue = TK.IntVar() + DlLicPole = TK.Spinbox(RamkaDl) + DlLicPole.config(textvariable = DlLicValue) + DlLicPole.config(from_ = 1, to = 10) + DlLicPole.config(width = 18) + DlLicPole.config(bg = M_entrytlo) + DlLicPole.config(fg = M_text) + DlLicPole.grid(row = 0, column = 1, padx = 5, pady = 5) + DlLicPole.delete(0, 'end') + DlLicPole.insert(0, int(MDlcg.read()[5])) + + DlBrLabel = TK.Label(RamkaDl) + DlBrLabel.config(text='Lata nauki w branżowej') + DlBrLabel.config(width = SzerokoscOpisu + 5) + DlBrLabel.config(bg = M_tlo) + DlBrLabel.config(fg = M_text) + DlBrLabel.grid(row = 0, column = 2) + + DlBrValue = TK.IntVar() + DlBrPole = TK.Spinbox(RamkaDl) + DlBrPole.config(textvariable = DlBrValue) + DlBrPole.config(from_ = 1, to=10) + DlBrPole.config(width = 18) + DlBrPole.config(bg = M_entrytlo) + DlBrPole.config(fg = M_text) + DlBrPole.grid(row = 0, column = 3, padx = 5, pady = 5) + DlBrPole.delete(0, 'end') + DlBrPole.insert(0, int(MDlcg.read()[6])) + + + # Domena + + DomenaLabel = TK.Label(Ramka4) + DomenaLabel.config(text = 'Domena') + DomenaLabel.config(width = SzerokoscOpisu + 5) + DomenaLabel.config(bg = M_tlo) + DomenaLabel.config(fg = M_text) + DomenaLabel.grid(row = 2, column = 0) + + text1 = TK.StringVar() + PoleDomena = TK.Entry(Ramka4) + PoleDomena.config(textvariable = text1) + PoleDomena.config(width = 69) + PoleDomena.config(bg = M_entrytlo) + PoleDomena.config(fg = M_text) + PoleDomena.grid(row = 2, column = 1, padx = 5, pady = 5) + PoleDomena.insert(0, MDlcg.read()[2]) + + + # Quota + + QuotaLabel = TK.Label(Ramka4) + QuotaLabel.config(text = 'Quota (MB)') + QuotaLabel.config(width = SzerokoscOpisu) + QuotaLabel.config(bg = M_tlo) + QuotaLabel.config(fg = M_text) + QuotaLabel.grid(row = 3, column = 0) + + value2 = TK.IntVar() + PoleQuota = TK.Spinbox(Ramka4) + PoleQuota.config(textvariable = value2) + PoleQuota.config(from_ = 1, to = 100000) + PoleQuota.config(width = 67) + PoleQuota.config(bg = M_entrytlo) + PoleQuota.config(fg = M_text) + PoleQuota.grid(row = 3, column = 1, padx = 5, pady = 5) + PoleQuota.delete(0, 'end') + PoleQuota.insert(0, int(MDlcg.read()[3])) + + + # Kraj + + KrajLabel = TK.Label(Ramka4) + KrajLabel.config(text = 'Kraj') + KrajLabel.config(width = SzerokoscOpisu + 5) + KrajLabel.config(bg = M_tlo) + KrajLabel.config(fg = M_text) + KrajLabel.grid(row = 4, column = 0) + + KrajValue = TK.StringVar() + KrajPole = TK.Entry(Ramka4) + KrajPole.config(textvariable = KrajValue) + KrajPole.config(width = 69) + KrajPole.config(bg = M_entrytlo) + KrajPole.config(fg = M_text) + KrajPole.grid(row = 4, column = 1, padx = 5, pady = 5) + KrajPole.insert(0, MDlcg.read()[4]) + + + # Przycisk ZAPISZ + def save(): + if MDdlg.ask(1): + motyw = Motyw_list.get() + if motyw == 'Jasny': + motyw = '0' + else: + motyw = '1' + kodowanie = Code_list.get() + uczniowiefmt = UczniowieFormat.get('1.0', 'end') + nauczycielefmt = NauczycieleFormat.get('1.0', 'end') + liclata = DlLicPole.get() + brlata = DlBrPole.get() + domena = PoleDomena.get() + quota = PoleQuota.get() + kraj = KrajPole.get() + SettingsToSave = [motyw, kodowanie, domena, quota, kraj, liclata, brlata] + FormatToSave = [uczniowiefmt, nauczycielefmt] + if MDlfm.edit(FormatToSave): + MDlcg.edit(SettingsToSave) + MDdlg.inf(0) + self.destroy() + else: + pass + PrzyciskZAPISZ = TK.Button(self) + PrzyciskZAPISZ.config(text = 'ZAPISZ') + PrzyciskZAPISZ.config(command = save) + PrzyciskZAPISZ.config(width = 50) + PrzyciskZAPISZ.config(bg = M_przycisktlo) + PrzyciskZAPISZ.config(fg = M_przycisktext) + PrzyciskZAPISZ.config(relief = 'flat') + PrzyciskZAPISZ.config(activebackground = M_przycisktlo) + PrzyciskZAPISZ.grid(row = liczbawierszy + 1, pady = 15) + + + +# Inicjacja okna głównego +OknoGlowne = Main() +OknoGlowne.run() \ No newline at end of file diff --git a/modules/__init__.py b/modules/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/components/dialog.py b/modules/dialog.py similarity index 100% rename from components/dialog.py rename to modules/dialog.py diff --git a/components/load_config.py b/modules/load_config.py similarity index 80% rename from components/load_config.py rename to modules/load_config.py index 2d13677..3873945 100644 --- a/components/load_config.py +++ b/modules/load_config.py @@ -26,12 +26,20 @@ import sys as SS # Moduły składowe programu try: - import dialog as MDdlg + from modules import dialog as MDdlg except ModuleNotFoundError: - print('Nie znaleziono modułu programu (dialog.py)\nNie można załadować programu\nKod błędu: E00x0001') + print('Wystąpił krytyczny błąd!') + print('Nie znaleziono jednego z modułów programu (dialog.py). Nie można załadować programu') + print('Kod błędu: E00x0011') + wait = input('Naciśnij ENTER aby wyjść') + SS.exit(0) +except Exception as exc: + print('Wystąpił krytyczny błąd!') + print('Nieznany błąd podczas ładowania jednego z modułów programu (dialog.py). Nie można załadować programu.') + print('Treść błędu: ' + exc) + print('Kod błędu: E00x0010') wait = input('Naciśnij ENTER aby wyjść') SS.exit(0) - diff --git a/components/load_format.py b/modules/load_format.py similarity index 86% rename from components/load_format.py rename to modules/load_format.py index 6576274..848cfbb 100644 --- a/components/load_format.py +++ b/modules/load_format.py @@ -22,11 +22,22 @@ # Biblioteki zewnętrzne import sys as SS + + # Moduły składowe programu try: - import dialog as MDdlg + from modules import dialog as MDdlg except ModuleNotFoundError: - print('Nie znaleziono modułu programu (dialog.py)\nNie można załadować programu\nKod błędu: E00x0001') + print('Wystąpił krytyczny błąd!') + print('Nie znaleziono jednego z modułów programu (dialog.py). Nie można załadować programu') + print('Kod błędu: E00x0011') + wait = input('Naciśnij ENTER aby wyjść') + SS.exit(0) +except Exception as exc: + print('Wystąpił krytyczny błąd!') + print('Nieznany błąd podczas ładowania jednego z modułów programu (dialog.py). Nie można załadować programu.') + print('Treść błędu: ' + exc) + print('Kod błędu: E00x0010') wait = input('Naciśnij ENTER aby wyjść') SS.exit(0)