4.0 Alpha (Build 19346)

This commit is contained in:
2020-08-06 18:10:55 +02:00
Unverified
parent 7942cdac70
commit e16844fcce
19 changed files with 326 additions and 613 deletions

View File

@@ -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")