diff --git a/.idea/GeneratorCSV.iml b/.idea/GeneratorCSV 3.1.iml similarity index 79% rename from .idea/GeneratorCSV.iml rename to .idea/GeneratorCSV 3.1.iml index a94fbfe..9c88284 100644 --- a/.idea/GeneratorCSV.iml +++ b/.idea/GeneratorCSV 3.1.iml @@ -2,7 +2,7 @@ - + diff --git a/.idea/modules.xml b/.idea/modules.xml index 1b13c30..84256e7 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -2,7 +2,7 @@ - + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index aaff619..396011c 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -1,7 +1,7 @@ - + - + - - + - + - - - - @@ -89,16 +65,12 @@ - - 1574872723273 + + 1575129057993 @@ -106,7 +78,6 @@ - - + \ No newline at end of file diff --git a/__pycache__/format.cpython-36.pyc b/__pycache__/format.cpython-36.pyc deleted file mode 100644 index 14c6217..0000000 Binary files a/__pycache__/format.cpython-36.pyc and /dev/null differ diff --git a/__pycache__/format.cpython-38.pyc b/__pycache__/format.cpython-38.pyc deleted file mode 100644 index 4cdd0af..0000000 Binary files a/__pycache__/format.cpython-38.pyc and /dev/null differ diff --git a/__pycache__/moduly.cpython-36.pyc b/__pycache__/moduly.cpython-36.pyc deleted file mode 100644 index d943174..0000000 Binary files a/__pycache__/moduly.cpython-36.pyc and /dev/null differ diff --git a/__pycache__/moduly.cpython-38.pyc b/__pycache__/moduly.cpython-38.pyc deleted file mode 100644 index 9dcb6b2..0000000 Binary files a/__pycache__/moduly.cpython-38.pyc and /dev/null differ diff --git a/changelog-UC.txt b/changelog-UC.txt new file mode 100644 index 0000000..7f8e910 --- /dev/null +++ b/changelog-UC.txt @@ -0,0 +1,6 @@ +4.0 Alpha (Build 19346) +- Wstępne podzielenie programu na kilka modułów i przeniesienie ich do folderu 'components' +- Dodanie w głównym (nadrzędnym) folderze programu, skryptu inicjującego główny moduł programu +- Dodanie zapisu opcji czarnego motywu do 'config.cfg' +- Wstępne stworzenie skryptu pozwalającego na zapis do pliku 'config.cfg' +- Błąd o braku głównego pliku składowego programu ('main.py') oraz modułu wywołującego okna dialogowe ('dialog.py') \ No newline at end of file diff --git a/changelog.txt b/changelog.txt index 84f0073..44ab0b2 100644 --- a/changelog.txt +++ b/changelog.txt @@ -19,3 +19,4 @@ - Poprawka błędu - pole 3 i 4 nie mają już przypisanej tej samej zmiennej tekstowej - Przydzielenie wersji, autorów, tytułu programu i lat pracy do zmiennych globalnych środowiska graficznego +4.0 - Work in progress \ No newline at end of file diff --git a/components/__pycache__/dialog.cpython-38.pyc b/components/__pycache__/dialog.cpython-38.pyc new file mode 100644 index 0000000..8a7dee9 Binary files /dev/null and b/components/__pycache__/dialog.cpython-38.pyc differ diff --git a/components/__pycache__/load_config.cpython-38.pyc b/components/__pycache__/load_config.cpython-38.pyc new file mode 100644 index 0000000..a0178d6 Binary files /dev/null and b/components/__pycache__/load_config.cpython-38.pyc differ diff --git a/components/dialog.py b/components/dialog.py new file mode 100644 index 0000000..a8251b5 --- /dev/null +++ b/components/dialog.py @@ -0,0 +1,49 @@ +""" +# GeneratorCSV +# Wersja 4.0: UC 1 +# by Mateusz Skoczek +# luty 2019 - grudzień 2019 +# dla ZSP Sobolew + +# +# Moduł wywołujący okna dialogowe +# +""" + + + + + +# ---------------------------------------- # Import bibliotek zewnętrznych # ----------------------------------------- # + +from tkinter import messagebox as TKmsb +import sys as SS + + + + + + + + +# --------------------------------------------------- # Funkcje # ---------------------------------------------------- # + +# Okno dialogowe błędu +def Err(KodBledu): + Message = 'Wystąpił błąd!\n' + KodBledu[0] + TKmsb.showerror('Błąd', Message) + if KodBledu[1]: + SS.exit(0) + +# Okno dialogowe informacyjne +def Inf(KodInformacji): + TKmsb.showinfo('Informacja', KodInformacji[0]) + if KodInformacji[1]: + SS.exit(0) + +# Okno dialogowe zapytania +def Ask(KodZapytania): + if TKmsb.askokcancel('Pytanie', KodZapytania): + return True + else: + return False diff --git a/components/load_config.py b/components/load_config.py new file mode 100644 index 0000000..5860cb6 --- /dev/null +++ b/components/load_config.py @@ -0,0 +1,20 @@ +""" +# GeneratorCSV +# Wersja 4.0: UC 1 +# by Mateusz Skoczek +# luty 2019 - grudzień 2019 +# dla ZSP Sobolew + +# +# Moduł zarządzający plikiem konfiguracyjnym +# +""" + +def read(): + with open('.\config.cfg') as cfg: + cfg = cfg.read().split('\n') + settings = [] + for x in cfg + +def edit(): + pass diff --git a/components/main.py b/components/main.py new file mode 100644 index 0000000..f84fc20 --- /dev/null +++ b/components/main.py @@ -0,0 +1,220 @@ +""" +# GeneratorCSV +# Wersja 4.0: UC 1 +# by Mateusz Skoczek +# luty 2019 - grudzień 2019 +# dla ZSP Sobolew + +# +# Główny plik składowy programu +# +""" + + + + + + + + +# ----------------------------------------- # Definicja kodów dialogowych # ------------------------------------------ # + +E000x01 = "Brak modułu wywołującego okna dialogowe ('dialog.py').\nPrzywróć plik. (E000x01)" +E000x02 = ["Brak modułu zarządzającego plikiem konfiguracyjnym ('load_config.py').\nPrzywróć plik. (E000x02)", True] + + + + + + + + +# ----------------------------------- # 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('Nieoczekiwany wyjatek - nie mozna wygenerowac okna dialogowego bledu\n\nBŁĄD KRYTYCZNY!\n%s') %E000x01 + wait = input('Naciśnij ENTER aby zakończyć') + SS.exit(0) +try: + import load_config as MDlcg +except ModuleNotFoundError: + MDdlg.Err(E000x02) + +# Biblioteki zewnętrzne interfejsu graficznego +from tkinter import filedialog as TKfld +import tkinter as TK + + + + + + + + + +# ------------------------------------- # Uruchomienie interfejsu graficznego # -------------------------------------- # + +# Informacje o programie +Nazwa = 'GeneratorCSV' +Wersja = '4.0' #Todo wersja + +# Zmienne globalne środowiska graficznego + +CiemnyMotyw = +SzerokoscOpisu = 17 +SzerokoscPola = 91 + +def settings(): + SettingsWindow = TK.Tk() + SettingsWindow.title('ustawienia') + SettingsWindow.mainloop() + +def main(): + # Tworzenie okna głównego + MainWindow = TK.Tk() + MainWindow.title(Nazwa + ' ' + Wersja) + MainWindow.resizable(width = False, height = False) + + Tytul = TK.Label(MainWindow, text='GeneratorCSV', font=('Segoe UI Semilight', 20), borderwidth=7, justify='center', + bg='Gainsboro', width=47) + Tytul.grid(row=0) + + MainWindow.mainloop() +main() + +""" +def gui(): + # Tworzenie okna + OknoGlowne = TK.Tk() + OknoGlowne.title('GeneratorCSV') + OknoGlowne.resizable(width=False, height=False) + + # Nazwa programu + + + # Tworzenie frame dla ścieżek plików do importu + Ramka1 = TK.LabelFrame(OknoGlowne, text='Pliki do importu zawierające dane') + Ramka1.grid(row=1) + + # Ścieżka pliku do importu 1 + wiersz1 = 0 + text1 = TK.StringVar() + OpisPola1 = TK.Label(Ramka1, text='Plik z danymi (1)', justify='left', width=SzerokoscOpisu) + OpisPola1.grid(row=wiersz1, column=0) + Pole1 = TK.Entry(Ramka1, textvariable=text1, width=SzerokoscPola) + Pole1.grid(row=wiersz1, column=1) + + def Browse1_Dialog(): + Browse1.filename = TKfld.askopenfilename(initialdir="/", title="Wybierz plik", + filetypes=(("Pliki txt", "*.txt"), ("Wszystkie pliki", "*.*"))) + Pole1.delete(0, 'end') + Pole1.insert(0, Browse1.filename) + + Browse1 = TK.Button(Ramka1, text='...', command=Browse1_Dialog, background='silver', relief='flat') + Browse1.grid(row=wiersz1, column=2, padx=5, pady=3) + + # Ścieżka pliku do importu 2 + wiersz2 = 1 + text2 = TK.StringVar() + OpisPola2 = TK.Label(Ramka1, text='Plik z danymi (2)', justify='left', width=SzerokoscOpisu) + OpisPola2.grid(row=wiersz2, column=0) + Pole2 = TK.Entry(Ramka1, textvariable=text2, width=SzerokoscPola) + Pole2.grid(row=wiersz2, column=1) + + def Browse2_Dialog(): + Browse2.filename = TKfld.askopenfilename(initialdir="/", title="Wybierz plik", + filetypes=(("Pliki txt", "*.txt"), ("Wszystkie pliki", "*.*"))) + Pole2.delete(0, 'end') + Pole2.insert(0, Browse2.filename) + + Browse2 = TK.Button(Ramka1, text='...', command=Browse2_Dialog, background='silver', relief='flat') + Browse2.grid(row=wiersz2, column=2, padx=5, pady=3) + + # Ścieżka pliku do importu 3 + wiersz3 = 2 + text3 = TK.StringVar() + OpisPola3 = TK.Label(Ramka1, text='Plik z danymi (3)', justify='left', width=SzerokoscOpisu) + OpisPola3.grid(row=wiersz3, column=0) + Pole3 = TK.Entry(Ramka1, textvariable=text3, width=SzerokoscPola) + Pole3.grid(row=wiersz3, column=1) + + def Browse3_Dialog(): + Browse3.filename = TKfld.askopenfilename(initialdir="/", title="Wybierz plik", + filetypes=(("Pliki txt", "*.txt"), ("Wszystkie pliki", "*.*"))) + Pole3.delete(0, 'end') + Pole3.insert(0, Browse3.filename) + + Browse3 = TK.Button(Ramka1, text='...', command=Browse3_Dialog, background='silver', relief='flat') + Browse3.grid(row=wiersz3, column=2, padx=5, pady=3) + + # Ścieżka pliku do importu 4 + wiersz4 = 3 + text4 = TK.StringVar() + OpisPola4 = TK.Label(Ramka1, text='Plik z danymi (4)', justify='left', width=SzerokoscOpisu) + OpisPola4.grid(row=wiersz4, column=0) + Pole4 = TK.Entry(Ramka1, textvariable=text3, width=SzerokoscPola) + Pole4.grid(row=wiersz4, column=1) + + def Browse4_Dialog(): + Browse4.filename = TKfld.askopenfilename(initialdir="/", title="Wybierz plik", + filetypes=(("Pliki txt", "*.txt"), ("Wszystkie pliki", "*.*"))) + Pole4.delete(0, 'end') + Pole4.insert(0, Browse4.filename) + + Browse4 = TK.Button(Ramka1, text='...', command=Browse4_Dialog, background='silver', relief='flat') + Browse4.grid(row=wiersz4, column=2, padx=5, pady=3) + + # Tworzenie frame dla plików export + Ramka2 = TK.LabelFrame(OknoGlowne, text='Ustawienia eksportu') + Ramka2.grid(row=2) + + # Ścieżka folderu do zapisu wygenerowanych plików + text4 = TK.StringVar() + OpisPolaExport = TK.Label(Ramka2, text='Lokalizacja', justify='left', width=SzerokoscOpisu) + OpisPolaExport.grid(row=0, column=0) + PoleExport = TK.Entry(Ramka2, textvariable=text4, width=SzerokoscPola) + PoleExport.grid(row=0, column=1) + + def BrowseExport_Dialog(): + BrowseExport.filename = TKfld.askdirectory() + PoleExport.delete(0, 'end') + PoleExport.insert(0, BrowseExport.filename) + + BrowseExport = TK.Button(Ramka2, text='...', command=BrowseExport_Dialog, background='silver', relief='flat') + BrowseExport.grid(row=0, column=2, padx=5, pady=3) + + # Przycisk START + Przycisk = TK.Button(OknoGlowne, text='START', justify='center', width=50, relief='flat', background='silver') + command=Main + Przycisk.grid(row=3, pady=15) + + # Pasek dolny + PasekDolny = TK.LabelFrame(OknoGlowne, bd=0, background='Gainsboro') + PasekDolny.grid(row=4) + InfoLabel = TK.Label(PasekDolny, text='GeneratorCSV 3.0 | © Mateusz Skoczek 2019 dla ZSP Sobolew', justify='left', + width=93, anchor='w', background='Gainsboro') + InfoLabel.grid(row=0, column=0) + + def InfoOpen(): + try: + x = open('instrukcja.txt') + except FileNotFoundError: + DG.err(E001x03) + else: + OS.system("notepad instrukcja.txt") + + Przycisk = TK.Button(PasekDolny, text='Instrukcja', justify='center', foreground='blue', relief='flat', + command=InfoOpen, background='Gainsboro') + Przycisk.grid(row=0, column=1) + + TK.mainloop() + +gui() +""" diff --git a/config.cfg b/config.cfg index 675c8af..2e25a57 100644 --- a/config.cfg +++ b/config.cfg @@ -1 +1,2 @@ +Ciemny motyw: 1 Kodowanie: utf-8 \ No newline at end of file diff --git a/format.py b/format.py deleted file mode 100644 index 69472dc..0000000 --- a/format.py +++ /dev/null @@ -1,141 +0,0 @@ -# Oznaczenia zmiennych: -# K - Klasa -# N - Nazwisko -# I - Imie -# L - Login do librusa - - - - - -import codecs as cd - -def SprawdzKlasa(K): - if len(K.split(' ')) != 2: # Wywołuje błąd jeżeli napis nie dzieli się w pożądanym formacie - blad = int('x') # - - for x in range(0,10): # - if K[1:].find(str(x)) != -1: # Wywołuje bląd jeżeli w nazwie klasy (poza numerem klasy) znajduje się liczba - blad = int('x') # - - numery_niedozwolone = [0,9,8,7,6,5,4] # Określa numery klas które nie istnieją - - for x in numery_niedozwolone: # - if K[0] == str(x): # Wywołuje błąd jeżeli numer klasy jest równy numerowi niedozwolonemu - blad = int('x') # - - szkoly = ['BS', 'LO'] # Określa istniejące szkoly - - if K.split(' ')[1] not in szkoly: # Wywołuje błąd jeżeli szkola nie należy do szkół istniejących - blad = int('x') # - - oddzialy = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'w', 'y', 'z'] # Określa istniejące oddzialy - - if K[1] not in oddzialy: # Wywołuje błąd jeżeli oddział nie należy do oddziałów istniejących - blad = int('x') # - - -def SprawdzNazwisko(N): - for a in N: - for x in range(0,10): # - if a.find(str(x)) != -1: # Wywoluje blad jeżeli nazwisko zawiera liczbę - blad = int('x') # - - -def SprawdzImie(I): - for x in range(0,10): # - if I.find(str(x)) != -1: # Wywoluje blad jeżeli imie zawiera liczbę - blad = int('x') # - - -def SprawdzLogin(L, CzyUczen): - if CzyUczen and L[-1] != 'u': # Wywoluje blad jeżeli login ucznia nie zawiera na końcu 'u' - blad = int('x') # - - if CzyUczen: # - blad = int(L[:-1]) # Wywoluje blad jeżeli login (-'u' dla ucznia) nie jest liczbą - else: # - blad = int(L) # - - - - -def przetworz(dane): - dane = dane.split('\n\n') # dzielenie danych na pojedyńcze osoby - - przetworzone = [] # tworzenie kontenera na przetworzone dane - - for osoba in dane: # - try: # - x = int(osoba[0]) # - except ValueError: # Sprawdza czy osoba jest nauczycielem czy uczniem - CzyUczen = False # - else: # - CzyUczen = True # - - # Dla uczniów - if CzyUczen: - K = osoba.split(', ')[0].split(' ')[:2] - K = K[0] + ' ' + K[1] - N = osoba.split(', ')[0].split(' ')[2:] - I = osoba.split(', ')[1].split(' ')[0] - L = osoba.split(', ')[1].split(' ')[2] - - # Sprawdzenie poprawności - SprawdzKlasa(K) - SprawdzNazwisko(N) - SprawdzImie(I) - SprawdzLogin(L, CzyUczen) - - dane = [K, N, I, L, CzyUczen] - przetworzone.append(dane) - # Dla nauczycieli - else: - N = osoba.split(', ')[0].split(' ') - I = osoba.split(', ')[1].split(' ')[-4] - L = osoba.split(', ')[1].split(' ')[-2] - - # Sprawdzenie poprawnosci - SprawdzNazwisko(N) - SprawdzImie(I) - SprawdzLogin(L, CzyUczen) - - dane = [N, I, L, CzyUczen] - przetworzone.append(dane) - return przetworzone - - - - - - -# Legenda do części dokumentacji poniżej: -# X - Dane nieznaczące -# Q - Pusta linia - - -# Format danych dla uczniów: -# , -# - -# Przykład: -# 1a BS Nowak, Adam 1234567u -# - - -# Format danych dla nauczycieli: -# , -# - -# Przykład: -# Nowak, Adam 1234567 -# - - - - -# Inne: -# - skrypt akceptuje prefix 'ks.', nieuwzględnia go w przetwarzaniu -# - skrypt akceptuje nazwiska holenderskie (typu 'van X', 'van der X' itp.) i uwzględnia je w przetwarzaniu -# - skrypt nie akceptuje nazwisk złożonych (np. Nowak-Kowalska) -# - skrypt wymaga kodowania ANSI diff --git a/generator.py b/generator.py index f6919a6..4d64128 100644 --- a/generator.py +++ b/generator.py @@ -1,9 +1,14 @@ +""" # GeneratorCSV -# Wersja 3.0.1 +# Wersja 4.0: UC 1 # by Mateusz Skoczek # luty 2019 - grudzień 2019 # dla ZSP Sobolew +# +# Główny skrypt uruchamiający +# +""" @@ -12,28 +17,9 @@ +# ----------------------------------------- # Definicja kodów dialogowych # ------------------------------------------ # -## Defincja błędów ############################################################################## - -# E001 - Brak pliku składowego -E001x00 = "Brak pliku formatu 'moduly.py'.\nPrzywróć plik. (E001x00)" -E001x01 = "Brak pliku formatu 'format.py'.\nPrzywróć plik. (E001x01)" -E001x02 = "Brak pliku konfiguracyjnego 'config.cfg'.\nPrzywróć plik. (E001x02)" -E001x03 = "Brak pliku 'instrukcja.txt'.\nPrzywróć plik. (E001x03)" - -# E002 - Błąd pliku składowego -E002x02 = "Nieokreślony błąd pliku konfiguracyjnego 'config.cfg'.\nPrzywróć domyślny plik lub popraw ustawienia. (E002x02)" -E002x021 = "Błąd pliku konfiguracyjnego 'config.cfg'.\nPodane kodowanie nie jest obsługiwane\nPrzywróć domyślny plik lub popraw ustawienia. (E002x021)" - -# E003 - Błąd lokalizacji plików I/O -E003x01 = "Nie podano lokalizacji plików do importu. (E003x01)" -E003x02 = "Nie podano lokalizacji zapisu wygenerowanych plików. (E003x02)" -E003x111 = "Plik podany w sciezce 1 nie istnieje (E003x111)" -E003x112 = "Plik podany w sciezce 2 nie istnieje (E003x112)" -E003x113 = "Plik podany w sciezce 3 nie istnieje (E003x113)" -E003x114 = "Plik podany w sciezce 4 nie istnieje (E003x114)" - -#_______________________________________________________________________________________________# +E000x00 = "Brak głównego pliku składowego programu ('main.py').\nPrzywróć plik. (E000x00)" @@ -42,21 +28,10 @@ E003x114 = "Plik podany w sciezce 4 nie istnieje (E003x114)" +# ---------------------------------------- # Import bibliotek zewnętrznych # ----------------------------------------- # - -## Import bibliotek zewnętrznych ################################################################ - -import tkinter as tk -import codecs as cd -import os -import time as tm -import sys as ss - -# Definicja składowych biblioteki interfejsu graficznego -from tkinter import filedialog as TKfld -from tkinter import messagebox as TKmsb - -#_______________________________________________________________________________________________# +import os as OS +import sys as SS @@ -65,351 +40,13 @@ from tkinter import messagebox as TKmsb - - -## Weryfikacja istnienia plików składowych programu ############################################# +# ----------------------------------------- # Uruchomienie głównego modułu # ----------------------------------------- # try: - x = open('moduly.py') -except FileNotFoundError: - Message = 'Wystąpił błąd!\n' + E001x00 - tk.showerror('Błąd', Message) - ss.exit(0) - -try: - x = open('format.py') -except FileNotFoundError: - Message = 'Wystąpił błąd!\n' + E001x01 - tk.showerror('Błąd', Message) - ss.exit(0) - -#_______________________________________________________________________________________________# - - - - - - - - - - -## Import modułów programu ###################################################################### - -# Import modułów składowych programu -from moduly import ErrorDialog as MDerr -from moduly import FileCheck as MDfck -from moduly import PolishLetterRemover as MDplr -from moduly import ClassTagCreator as MDctc - -# Import skryptu przetwarzającego dane -import format as ft - -#_______________________________________________________________________________________________# - - - - - - - - - - - -## Weryfikacja istnienia plików składowych ###################################################### - -MDfck('format.py', E001x01) -MDfck('config.cfg', E001x02) -MDfck('instrukcja.txt', E001x03) - -#_______________________________________________________________________________________________# - - - - - - - - - - - -## Wczytywanie pliku konfiguracyjnego ########################################################### - -try: - with open('config.cfg', 'r') as config: - config = config.read().split('\n') - Kodowanie = str(config[0].strip('Kodowanie: ')) - TypyKodowania = ['utf-8', 'cp1252', 'iso-8859-1'] - if Kodowanie not in TypyKodowania: - MDerr(E002x021) + fck = open("components\main.py") except: - MDerr(E002x02) - -#_______________________________________________________________________________________________# - - - - - - - - - - - -## Inicjacja skryptu przetwarzającego dane ###################################################### - -def Main(): - if TKmsb.askokcancel('Ostrzeżenie', "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."): - sciezka1 = Pole1.get() - sciezka1_puste = True - sciezka2 = Pole2.get() - sciezka2_puste = True - sciezka3 = Pole3.get() - sciezka3_puste = True - sciezka4 = Pole3.get() - sciezka4_puste = True - sciezkaExport = PoleExport.get() - sciezkaExport_puste = True - - if sciezka1 != '': - sciezka1_puste = False - if sciezka2 != '': - sciezka2_puste = False - if sciezka3 != '': - sciezka3_puste = False - if sciezka4 != '': - sciezka4_puste = False - if sciezkaExport != '': - sciezkaExport_puste = False - - if sciezka1_puste and sciezka2_puste and sciezka3_puste and sciezka4_puste: - MDerr(E003x01) - if sciezkaExport_puste: - MDerr(E003x02) - - KontenerDanych = [] - if not sciezka1_puste: - try: - x = open(sciezka1) - except FileNotFoundError: - MDerr(E003x111) - else: - with open(sciezka1, 'r') as plik1: - KontenerDanych += ft.przetworz(plik1.read()) - if not sciezka2_puste: - try: - x = open(sciezka2) - except FileNotFoundError: - MDerr(E003x112) - else: - with open(sciezka2, 'r') as plik2: - KontenerDanych += ft.przetworz(plik2.read()) - if not sciezka3_puste: - try: - x = open(sciezka3) - except FileNotFoundError: - MDerr(E003x113) - else: - with open(sciezka3, 'r') as plik3: - KontenerDanych += ft.przetworz(plik3.read()) - if not sciezka4_puste: - try: - x = open(sciezka4) - except FileNotFoundError: - MDerr(E003x114) - else: - with open(sciezka4, 'r') as plik4: - KontenerDanych += ft.przetworz(plik4.read()) - - 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 = MDctc(Klasa) - Login = osoba[3] - Adres = MDplr(Imie).lower() + MDplr(NazwiskoDoEmaila).lower() + ZnacznikKlasy + '@losobolew.pl' - Email = Adres + ',' + Login + ':' + MDplr(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 = MDplr(Imie).lower() + MDplr(NazwiskoDoEmaila).lower() + '@losobolew.pl' - Email = Adres + ',' + Login + ':' + MDplr(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', Kodowanie) as plikEmail: - for x in KontenerEmail: - plikEmail.writelines(x + '\n') - plikEmail.close() - with cd.open(sciezkaOffice, 'w', Kodowanie) as plikOffice: - for x in KontenerOffice: - plikOffice.writelines(x + '\n') - plikOffice.close() - TKmsb.showinfo('Zakończono', 'Operacja zakończona pomyślnie') - ss.exit(0) - else: - ss.exit(0) - - -#_______________________________________________________________________________________________# - - - - - - - - - - - -## Inicjacja okna ############################################################################### - -# Zmienne globalne środowiska graficznego -SzerokoscOpisu = 17 -SzerokoscPola = 91 -TytulProgramu = 'GeneratorCSV' -Autorzy = 'Mateusz Skoczek' -Wersja = '3.0.1' -Lata = '2019' - -# Tworzenie okna -OknoGlowne = tk.Tk() -OknoGlowne.title(TytulProgramu) -OknoGlowne.resizable(width = False, height = False) - -# Nazwa programu -Tytul = tk.Label(OknoGlowne, text = TytulProgramu, font = ('Segoe UI Semilight', 20), borderwidth = 7, justify = 'center', bg = 'Gainsboro', width = 47) -Tytul.grid(row = 0) - - -# Tworzenie frame dla ścieżek plików do importu -Ramka1 = tk.LabelFrame(OknoGlowne, text = 'Pliki do importu zawierające dane') -Ramka1.grid(row = 1) - -# Ścieżka pliku do importu 1 -wiersz1 = 0 -text1 = tk.StringVar() -OpisPola1 = tk.Label(Ramka1, text = 'Plik z danymi (1)', justify = 'left', width = SzerokoscOpisu) -OpisPola1.grid(row = wiersz1, column = 0) -Pole1 = tk.Entry(Ramka1, textvariable = text1, width = SzerokoscPola) -Pole1.grid(row = wiersz1, column = 1) -def Browse1_Dialog(): - Browse1.filename = TKfld.askopenfilename(initialdir="/", title="Wybierz plik", filetypes=(("Pliki txt", "*.txt"), ("Wszystkie pliki", "*.*"))) - Pole1.delete(0, 'end') - Pole1.insert(0, Browse1.filename) -Browse1 = tk.Button(Ramka1, text = '...', command = Browse1_Dialog, background = 'silver', relief = 'flat') -Browse1.grid(row = wiersz1, column = 2, padx = 5, pady = 3) - -# Ścieżka pliku do importu 2 -wiersz2 = 1 -text2 = tk.StringVar() -OpisPola2 = tk.Label(Ramka1, text = 'Plik z danymi (2)', justify = 'left', width = SzerokoscOpisu) -OpisPola2.grid(row = wiersz2, column = 0) -Pole2 = tk.Entry(Ramka1, textvariable = text2, width = SzerokoscPola) -Pole2.grid(row = wiersz2, column = 1) -def Browse2_Dialog(): - Browse2.filename = TKfld.askopenfilename(initialdir="/", title="Wybierz plik", filetypes=(("Pliki txt", "*.txt"), ("Wszystkie pliki", "*.*"))) - Pole2.delete(0, 'end') - Pole2.insert(0, Browse2.filename) -Browse2 = tk.Button(Ramka1, text = '...', command = Browse2_Dialog, background = 'silver', relief = 'flat') -Browse2.grid(row = wiersz2, column = 2, padx = 5, pady = 3) - -# Ścieżka pliku do importu 3 -wiersz3 = 2 -text3 = tk.StringVar() -OpisPola3 = tk.Label(Ramka1, text = 'Plik z danymi (3)', justify = 'left', width = SzerokoscOpisu) -OpisPola3.grid(row = wiersz3, column = 0) -Pole3 = tk.Entry(Ramka1, textvariable = text3, width = SzerokoscPola) -Pole3.grid(row = wiersz3, column = 1) -def Browse3_Dialog(): - Browse3.filename = TKfld.askopenfilename(initialdir="/", title="Wybierz plik", filetypes=(("Pliki txt", "*.txt"), ("Wszystkie pliki", "*.*"))) - Pole3.delete(0, 'end') - Pole3.insert(0, Browse3.filename) -Browse3 = tk.Button(Ramka1, text = '...', command = Browse3_Dialog, background = 'silver', relief = 'flat') -Browse3.grid(row = wiersz3, column = 2, padx = 5, pady = 3) - -# Ścieżka pliku do importu 4 -wiersz4 = 3 -text4 = tk.StringVar() -OpisPola4 = tk.Label(Ramka1, text = 'Plik z danymi (4)', justify = 'left', width = SzerokoscOpisu) -OpisPola4.grid(row = wiersz4, column = 0) -Pole4 = tk.Entry(Ramka1, textvariable = text4, width = SzerokoscPola) -Pole4.grid(row = wiersz4, column = 1) -def Browse4_Dialog(): - Browse4.filename = TKfld.askopenfilename(initialdir="/", title="Wybierz plik", filetypes=(("Pliki txt", "*.txt"), ("Wszystkie pliki", "*.*"))) - Pole4.delete(0, 'end') - Pole4.insert(0, Browse4.filename) -Browse4 = tk.Button(Ramka1, text = '...', command = Browse4_Dialog, background = 'silver', relief = 'flat') -Browse4.grid(row = wiersz4, column = 2, padx = 5, pady = 3) - - -# Tworzenie frame dla plików export -Ramka2 = tk.LabelFrame(OknoGlowne, text = 'Ustawienia eksportu') -Ramka2.grid(row = 2) - -# Ścieżka folderu do zapisu wygenerowanych plików -text4 = tk.StringVar() -OpisPolaExport = tk.Label(Ramka2, text = 'Lokalizacja', justify = 'left', width = SzerokoscOpisu) -OpisPolaExport.grid(row = 0, column = 0) -PoleExport = tk.Entry(Ramka2, textvariable = text4, width = SzerokoscPola) -PoleExport.grid(row = 0, column = 1) -def BrowseExport_Dialog(): - BrowseExport.filename = TKfld.askdirectory() - PoleExport.delete(0, 'end') - PoleExport.insert(0, BrowseExport.filename) -BrowseExport = tk.Button(Ramka2, text = '...', command = BrowseExport_Dialog, background = 'silver', relief = 'flat') -BrowseExport.grid(row = 0, column = 2, padx = 5, pady = 3) - - -# Przycisk START -Przycisk = tk.Button(OknoGlowne, text = 'START', justify = 'center', width = 50, command = Main, relief = 'flat', background = 'silver') -Przycisk.grid(row = 3, pady = 15) - - -# Pasek dolny -PasekDolny = tk.LabelFrame(OknoGlowne, bd = 0, background = 'Gainsboro') -PasekDolny.grid(row = 4) -info = TytulProgramu + ' ' + Wersja + ' | © ' + Autorzy + ' '+ Lata + ' dla ZSP Sobolew' -InfoLabel = tk.Label(PasekDolny, text = info, justify = 'left', width = 93, anchor = 'w', background = 'Gainsboro') -InfoLabel.grid(row= 0, column = 0) -def InfoOpen(): - try: - x = open('instrukcja.txt') - except FileNotFoundError: - MDerr(E001x03) - else: - os.system("notepad instrukcja.txt") -Przycisk = tk.Button(PasekDolny, text = 'Instrukcja', justify = 'center', foreground = 'blue', relief = 'flat', command = InfoOpen, background = 'Gainsboro') -Przycisk.grid(row = 0, column = 1) - - -tk.mainloop() - -#_______________________________________________________________________________________________# + print('Nieoczekiwany wyjatek - nie mozna wygenerowac okna dialogowego bledu\n\nBŁĄD KRYTYCZNY!\n%s') % E000x00 + wait = input('Naciśnij ENTER aby zakończyć') + SS.exit(0) +else: + OS.system("components\main.py") diff --git a/instrukcja.txt b/instruction.txt similarity index 100% rename from instrukcja.txt rename to instruction.txt diff --git a/moduly.py b/moduly.py deleted file mode 100644 index d98987d..0000000 --- a/moduly.py +++ /dev/null @@ -1,51 +0,0 @@ -import sys as ss -import time as tm -from tkinter import messagebox as TKmsb - -def ErrorDialog(KodBledu): - Message = 'Wystąpił błąd!\n' + KodBledu - TKmsb.showerror('Błąd', Message) - ss.exit(0) - -def FileCheck(Plik, KodBledu): - try: - x = open(Plik) - except FileNotFoundError: - ErrorDialog(KodBledu) - -def PolishLetterRemover(text): - text1 = text.replace('ę', 'e') - text2 = text1.replace('ó', 'o') - text3 = text2.replace('ą', 'a') - text4 = text3.replace('ś', 's') - text5 = text4.replace('ł', 'l') - text6 = text5.replace('ż', 'z') - text7 = text6.replace('ź', 'z') - text8 = text7.replace('ć', 'c') - text9 = text8.replace('ń', 'n') - text10 = text9.replace('Ę', 'E') - text11 = text10.replace('Ó', 'O') - text12 = text11.replace('Ą', 'A') - text13 = text12.replace('Ś', 'S') - text14 = text13.replace('Ł', 'L') - text15 = text14.replace('Ż', 'Z') - text16 = text15.replace('Ź', 'Z') - text17 = text16.replace('Ć', 'C') - text = text17.replace('Ń', 'N') - return text - -def ClassTagCreator(Klasa): - czas = tm.localtime() - miesiac = czas[1] - if miesiac >= 9: - rokpodst = czas[0] - else: - rokpodst = czas[0] - 1 - nrklasy = int(Klasa[0]) - literaklasy = Klasa[1] - szkola = Klasa.split(' ')[1] - if szkola == 'BS': - znacznik = str((4 - nrklasy) + rokpodst) + szkola - else: - znacznik = str((5 - nrklasy) + rokpodst) + literaklasy - return znacznik \ No newline at end of file