4.0 Alpha (Build 19350)

This commit is contained in:
2020-08-06 18:22:56 +02:00
Unverified
parent cdb2541292
commit 684ef6ae2a
11 changed files with 629 additions and 348 deletions

3
.idea/workspace.xml generated
View File

@@ -81,6 +81,7 @@
<workItem from="1576401956701" duration="4897000" />
<workItem from="1576407152914" duration="5325000" />
<workItem from="1576412749235" duration="7110000" />
<workItem from="1576512214017" duration="18989000" />
</task>
<servers />
</component>
@@ -103,6 +104,6 @@
<component name="com.intellij.coverage.CoverageDataManagerImpl">
<SUITE FILE_PATH="coverage/GeneratorCSV_3_1$generator.coverage" NAME="generator Coverage Results" MODIFIED="1575142941417" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
<SUITE FILE_PATH="coverage/Wersja_Under_Construction$generator.coverage" NAME="generator Coverage Results" MODIFIED="1575214162661" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
<SUITE FILE_PATH="coverage/Generator_CSV$generator.coverage" NAME="generator Coverage Results" MODIFIED="1576420299727" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
<SUITE FILE_PATH="coverage/Generator_CSV$generator.coverage" NAME="generator Coverage Results" MODIFIED="1576536334314" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
</component>
</project>

View File

@@ -30,3 +30,10 @@
- Stworzenie pliku formatu
- Usunięcie plików format.py i dataprocess.py
- Przygotowanie do dalszych prac
4.0 Alpha (Build 19350)
- Zastosowanie klas
- Wstępne stworzenie systemu formatu
- Modyfikacja interfejsu
- Dodanie możliwości dołączenia plików csv do eksportowanych plików (tylko kontrolki)
- Usprawnienia kodu

View File

@@ -25,7 +25,19 @@ E.append(["Błąd pliku konfiguracyjnego (config.cfg).\nNiepoprawna ilość wier
E.append(["Bład pliku konfiguracyjnego (config.cfg).\nNiepoprawne dane w wierszu 1\nPrzywróć plik. (E01x0011)", True]) #2
E.append(["Bład pliku konfiguracyjnego (config.cfg).\nNiepoprawne dane w wierszu 2\nPrzywróć plik. (E01x0012)", True]) #3
E.append(["Nie znaleziono pliku składowego (instruction.txt)\nPrzywróć plik. (E03x0010)", False]) #4
E.append(["Nie znaleziono pliku formatu (format.fmt).\nPrzywróć plik (E02x0000)", True]) #5
E.append(["Błąd pliku formatu (format.fmt).\nNie poprawne dane w formacie uczniów.\nIlość znaczników klasy w formacie uczniów nie jest równa 1 (E02x0002)", True]) #6
E.append(["Błąd pliku formatu (format.fmt).\nNie poprawne dane w formacie uczniów.\nIlość znaczników oddziału w formacie uczniów nie jest równa 1 (E02x0003)", True]) #7
E.append(["Błąd pliku formatu (format.fmt).\nNie poprawne dane w formacie uczniów.\nIlość znaczników nazwiska w formacie uczniów nie jest równa 1 (E02x0004)", True]) #8
E.append(["Błąd pliku formatu (format.fmt).\nNie poprawne dane w formacie uczniów.\nIlość znaczników imienia w formacie uczniów nie jest równa 1 (E02x0005)", True]) #9
E.append(["Błąd pliku formatu (format.fmt).\nNie poprawne dane w formacie uczniów.\nIlość znaczników loginu w formacie uczniów nie jest równa 1 (E02x0006)", True]) #10
E.append(["Błąd pliku formatu (format.fmt).\nPusty wiersz w formacie uczniów (E02x0001).", True]) #11
E.append(["Błąd pliku formatu (format.fmt).\nPusty wiersz w formacie nauczycieli (E02x0011).", True]) #12
E.append(["Błąd pliku formatu (format.fmt).\nNie poprawne dane w formacie nauczycieli.\nIlość znaczników nazwiska w formacie nauczycieli nie jest równa 1 (E02x0012)", True]) #13
E.append(["Błąd pliku formatu (format.fmt).\nNie poprawne dane w formacie nauczycieli.\nIlość znaczników imienia w formacie nauczycieli nie jest równa 1 (E02x0013)", True]) #14
E.append(["Błąd pliku formatu (format.fmt).\nNie poprawne dane w formacie nauczycieli.\nIlość znaczników loginu w formacie nauczycieli nie jest równa 1 (E02x0014)", True]) #15
E.append(["Błąd pliku formatu (format.fmt).\nNiedozwolone znaki w formacie. (E02x0020).", True]) #16
E.append(["Bład pliku konfiguracyjnego (config.cfg).\nNiepoprawne dane w wierszu 4\nPrzywróć plik. (E01x0013)", True]) #17
I = [] # Informacje
@@ -34,7 +46,7 @@ I.append(["Pomyślnie zapisano!\nDla niektórych zmian może być wymagane ponow
A = [] # Zapytania
A.append("Czy na pewno chcesz rozpocząć generowanie?") #0 (A0001)

View File

@@ -45,7 +45,7 @@ except ModuleNotFoundError:
def CheckConfig(settings):
# Ilość wierszy
try:
if len(settings) != 2:
if len(settings) != 5:
error = int('x')
except ValueError:
MDdlg.err(1)
@@ -66,6 +66,12 @@ def CheckConfig(settings):
except ValueError:
MDdlg.err(3)
# Linia 4 (int)
try:
x = int(settings[3])
except ValueError:
MDdlg.err(17)
# Odczytywanie ustawień z pliku konfiguracyjnego
@@ -95,7 +101,10 @@ def edit(settings):
else:
SettingsToSave = []
SettingsToSave.append('Ciemny motyw(0/1): ' + str(settings[0]) + '\n')
SettingsToSave.append('Kodowanie wyjsciowe: ' + str(settings[1]))
SettingsToSave.append('Kodowanie wyjsciowe: ' + str(settings[1]) + '\n')
SettingsToSave.append('Domena: ' + str(settings[2]) + '\n')
SettingsToSave.append('Quota: ' + str(settings[3]) + '\n')
SettingsToSave.append('Kraj: ' + str(settings[4]))
with open('.\config.cfg', 'w') as cfg:
for x in SettingsToSave:
cfg.write(x)

View File

@@ -37,4 +37,116 @@ except ModuleNotFoundError:
# --------------------------------------------------- # Funkcje # ---------------------------------------------------- #
# --------------------------------------------------- # Funkcje # ---------------------------------------------------- #
# Wewnętrzna funkcja sprawdzająca błędy pliku formatu
def CheckFormat(format):
uczniowiefmt = ''
for x in format[0]:
uczniowiefmt += x
try:
if format[0].count('') > 0:
error = int('x')
except ValueError:
MDdlg.err(11)
try:
if uczniowiefmt.count('K') != 1:
error = int('x')
except ValueError:
MDdlg.err(6)
try:
if uczniowiefmt.count('O') != 1:
error = int('x')
except ValueError:
MDdlg.err(7)
try:
if uczniowiefmt.count('N') != 1:
error = int('x')
except ValueError:
MDdlg.err(8)
try:
if uczniowiefmt.count('I') != 1:
error = int('x')
except ValueError:
MDdlg.err(9)
try:
if uczniowiefmt.count('L') != 1:
error = int('x')
except ValueError:
MDdlg.err(10)
try:
if format[1].count('') > 0:
error = int('x')
except ValueError:
MDdlg.err(12)
nauczycielefmt = ''
for x in format[1]:
nauczycielefmt += x
try:
if nauczycielefmt.count('N') != 1:
error = int('x')
except ValueError:
MDdlg.err(13)
try:
if nauczycielefmt.count('I') != 1:
error = int('x')
except ValueError:
MDdlg.err(14)
try:
if nauczycielefmt.count('L') != 1:
error = int('x')
except ValueError:
MDdlg.err(15)
NiedozwoloneZnaki = ['1','2','3','4','5','6','7','8','9','0','W','E','R','T','Y','U','P','A','S','D','F','G','H','J','Z','C','V','B','M']
try:
for x in NiedozwoloneZnaki:
if x in nauczycielefmt+uczniowiefmt:
error = int('x')
except ValueError:
MDdlg.err(16)
# Odczytywanie ustawień z pliku formatu
def read():
try:
check = open(r'.\format.fmt')
except FileNotFoundError:
MDdlg.err(5)
else:
with open(r'.\format.fmt', 'r') as fmt:
fmt = fmt.read().split('\n<separator>\n')
format = []
for x in fmt:
format.append(x.split('\n'))
CheckFormat(format)
return format
# Zapis ustawień do pliku formatu
def edit(format):
CheckFormat(format)
try:
check = open(r'.\format.fmt')
except FileNotFoundError:
MDdlg.err(5)
else:
FormatToSaveX = []
for x in format:
FormatToSaveX.append('\n'.join(x))
FormatToSave = FormatToSaveX[0] + '\n<separator>\n' + FormatToSaveX[1]
with open(r'.\format.fmt', 'w') as fmt:
fmt.write(FormatToSave)

View File

@@ -21,6 +21,8 @@
Nazwa = 'GeneratorCSV'
Wersja = '4.0 Experimental'
LataPracy = '2019'
Autorzy = 'Mateusz Skoczek'
@@ -77,14 +79,14 @@ 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
@@ -99,7 +101,7 @@ import tkinter as TK
#TODO
# ------------------------------------- # Uruchomienie interfejsu graficznego # -------------------------------------- #
# Zmienne globalne środowiska graficznego
@@ -108,390 +110,520 @@ if int(MDlcg.read()[0]) == 1:
else:
CiemnyMotyw = False
SzerokoscOpisu = 17
SzerokoscOpisu2 = 30
SzerokoscOpisu3 = 10
SzerokoscPola = 122
SzerokoscPola2 = 107
SzerokoscPola3 = 130
# Kolorystyka okna
# Motyw
if CiemnyMotyw:
PaletaBarw = ['#1F1F1F', '#191919', '#B8B8B8', '#FFFFFF', '#404040', '#FFFFFF', '#1F1F1F', 1]
ZmienneMotywu = ['#1F1F1F', '#191919', '#B8B8B8', '#FFFFFF', '#404040', '#FFFFFF', '#1F1F1F', 1]
else:
PaletaBarw = ['#F0F0F0', '#D4D4D4', '#000000', '#000000', '#A6A6A6', '#000000', '#FFFFFF', 2]
ZmienneMotywu = ['#F0F0F0', '#D4D4D4', '#000000', '#000000', '#A6A6A6', '#000000', '#FFFFFF', 2]
B_tlo = PaletaBarw[0]
B_tytultlo = PaletaBarw[1]
B_tytultext = PaletaBarw[2]
B_text = PaletaBarw[3]
B_przycisktlo = PaletaBarw[4]
B_przycisktext = PaletaBarw[5]
B_entrytlo = PaletaBarw[6]
B_framewielkosc = PaletaBarw[7]
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]
def settings():
# Tworzenie okna ustawień
SettingsWindow = TK.Tk()
SettingsWindow.title('Ustawienia programu')
SettingsWindow.resizable(width = False, height = False)
SettingsWindow.configure(background = B_tlo)
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)
# Tytul
Tytul = TK.Label(SettingsWindow)
Tytul.config(text = 'Ustawienia')
Tytul.config(width = 20)
Tytul.config(bg = B_tytultlo, fg = B_tytultext)
Tytul.config(font = ('Segoe UI Semilight', 20))
Tytul.grid(row = 0)
# 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 - Motyw
Ramka1 = TK.LabelFrame(SettingsWindow)
Ramka1.config(text = ' Motyw programu ')
Ramka1.config(bg = B_tlo, fg = B_text)
Ramka1.config(borderwidth = B_framewielkosc)
Ramka1.grid(row = 1, pady = 5)
Motyw_var = TK.StringVar()
if int(MDlcg.read()[0]) == 1:
Motyw_var.set('Ciemny')
Motyw_index = 1
else:
Motyw_var.set('Jasny')
Motyw_index = 0
Motyw_list = TKttk.Combobox(Ramka1)
Motyw_list.config(textvariable = Motyw_var, state = 'readonly')
Motyw_list.config(width = 43)
Motyw_list.grid(row = 0, pady = 5, padx = 5)
Motyw_list['values'] = ('Jasny', 'Ciemny')
Motyw_list.current(Motyw_index)
# 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)
# Frame2 - Kodowanie
Ramka2 = TK.LabelFrame(SettingsWindow)
Ramka2.config(text = ' Kodowanie wyjściowe ')
Ramka2.config(bg = B_tlo, fg = B_text)
Ramka2.config(borderwidth = B_framewielkosc)
Ramka2.grid(row = 2, pady = 5)
# Ścieżka pliku txt nr 1
wiersz = 1
text1 = TK.StringVar()
Code_var = TK.StringVar()
Code_var.set(MDlcg.read()[1])
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)
Code_list = TKttk.Combobox(Ramka2)
Code_list.config(textvariable = Code_var, state = 'readonly')
Code_list.config(width = 43)
Code_list.grid(row = 0, pady = 5, padx = 5)
Code_list['values'] = ('utf-8')
Code_list.set(MDlcg.read()[1])
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)
# Przycisk ZAPISZ
def zapis():
X1 = Motyw_list.get()
if X1 == 'Jasny':
X1 = '0'
else:
X1 = '1'
X2 = Code_list.get()
ToSave = [X1, X2]
MDlcg.edit(ToSave)
SettingsWindow.destroy()
PrzyciskZAPISZ = TK.Button(SettingsWindow)
PrzyciskZAPISZ.config(text = 'ZAPISZ')
PrzyciskZAPISZ.config(command = zapis)
PrzyciskZAPISZ.config(width = 40)
PrzyciskZAPISZ.config(bg = B_przycisktlo, fg = B_przycisktext, relief = 'flat', activebackground = B_przycisktlo)
PrzyciskZAPISZ.grid(row = 3, pady = 8)
# 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)
SettingsWindow.mainloop()
# 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)
def main():
# Tworzenie okna głównego
MainWindow = TK.Tk()
MainWindow.title(Nazwa + ' ' + Wersja)
MainWindow.resizable(width = False, height = False)
MainWindow.configure(background = B_tlo)
# 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)
# Tytul
Tytul = TK.Label(MainWindow)
Tytul.config(text = Nazwa)
Tytul.config(width = 41)
Tytul.config(bg = B_tytultlo, fg = B_tytultext)
Tytul.config(font = ('Segoe UI Semilight', 30))
Tytul.grid(row = 0)
# 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)
# Frame1 - Import
Ramka1 = TK.LabelFrame(MainWindow)
Ramka1.config(text = ' Pliki do importu zawierające dane ')
Ramka1.config(bg = B_tlo, fg = B_text)
Ramka1.config(borderwidth = B_framewielkosc)
Ramka1.grid(row = 1)
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)
# Ścieżka pliku do importu 1
wiersz = 1
text1 = TK.StringVar()
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)
OpisPola1 = TK.Label(Ramka1)
OpisPola1.config(text = 'Plik z danymi (1)')
OpisPola1.config(width = SzerokoscOpisu)
OpisPola1.config(bg = B_tlo, fg = B_text)
OpisPola1.grid(row = wiersz, column = 0)
# Sciezka do pliku office
wiersz = 2
textOfficeEksport = TK.StringVar()
Pole1 = TK.Entry(Ramka1)
Pole1.config(textvariable = text1)
Pole1.config(width = SzerokoscPola)
Pole1.config(bg = B_entrytlo, fg = B_text)
Pole1.grid(row = wiersz, column = 1)
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)
def Browse1_Dialog():
Browse1.filename = TKfld.askopenfilename(initialdir = "/", title = "Wybierz plik do importu", filetypes = (("Pliki txt", "*.txt"), ("Wszystkie pliki", "*.*")))
Pole1.delete(0, 'end')
Pole1.insert(0, Browse1.filename)
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)
Browse1 = TK.Button(Ramka1)
Browse1.config(text = '...')
Browse1.config(command = Browse1_Dialog)
Browse1.config(bg = B_przycisktlo, fg = B_przycisktext, relief='flat', activebackground = B_przycisktlo)
Browse1.grid(row = wiersz, column = 2, padx=5, pady=3)
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)
# Ścieżka pliku do importu 2
wiersz = 2
text2 = TK.StringVar()
OpisPola2 = TK.Label(Ramka1)
OpisPola2.config(text = 'Plik z danymi (2)')
OpisPola2.config(width = SzerokoscOpisu)
OpisPola2.config(bg = B_tlo, fg = B_text)
OpisPola2.grid(row = wiersz, column = 0)
Pole2 = TK.Entry(Ramka1)
Pole2.config(textvariable = text2)
Pole2.config(width = SzerokoscPola)
Pole2.config(bg = B_entrytlo, fg = B_text)
Pole2.grid(row = wiersz, column = 1)
def Browse2_Dialog():
Browse2.filename = TKfld.askopenfilename(initialdir = "/", title = "Wybierz plik do importu", filetypes = (("Pliki txt", "*.txt"), ("Wszystkie pliki", "*.*")))
Pole2.delete(0, 'end')
Pole2.insert(0, Browse2.filename)
Browse2 = TK.Button(Ramka1)
Browse2.config(text = '...')
Browse2.config(command = Browse1_Dialog)
Browse2.config(bg = B_przycisktlo, fg = B_przycisktext, relief = 'flat', activebackground = B_przycisktlo)
Browse2.grid(row = wiersz, column = 2, padx = 5, pady = 3)
# Ścieżka pliku do importu 3
wiersz = 3
text3 = TK.StringVar()
OpisPola3 = TK.Label(Ramka1)
OpisPola3.config(text = 'Plik z danymi (3)')
OpisPola3.config(width = SzerokoscOpisu)
OpisPola3.config(bg = B_tlo, fg = B_text)
OpisPola3.grid(row = wiersz, column = 0)
Pole3 = TK.Entry(Ramka1)
Pole3.config(textvariable = text3)
Pole3.config(width = SzerokoscPola)
Pole3.config(bg = B_entrytlo, fg = B_text)
Pole3.grid(row = wiersz, column = 1)
def Browse3_Dialog():
Browse3.filename = TKfld.askopenfilename(initialdir = "/", title = "Wybierz plik do importu", filetypes = (("Pliki txt", "*.txt"), ("Wszystkie pliki", "*.*")))
Pole3.delete(0, 'end')
Pole3.insert(0, Browse3.filename)
Browse3 = TK.Button(Ramka1)
Browse3.config(text = '...')
Browse3.config(command = Browse1_Dialog)
Browse3.config(bg = B_przycisktlo, fg = B_przycisktext, relief = 'flat', activebackground = B_przycisktlo)
Browse3.grid(row = wiersz, column = 2, padx = 5, pady = 3)
# Ścieżka pliku do importu 4
wiersz = 4
text4 = TK.StringVar()
OpisPola4 = TK.Label(Ramka1)
OpisPola4.config(text = 'Plik z danymi (4)')
OpisPola4.config(width = SzerokoscOpisu)
OpisPola4.config(bg = B_tlo, fg = B_text)
OpisPola4.grid(row = wiersz, column = 0)
Pole4 = TK.Entry(Ramka1)
Pole4.config(textvariable = text4)
Pole4.config(width = SzerokoscPola)
Pole4.config(bg = B_entrytlo, fg = B_text)
Pole4.grid(row = wiersz, column = 1)
def Browse4_Dialog():
Browse4.filename = TKfld.askopenfilename(initialdir = "/", title = "Wybierz plik do importu", filetypes = (("Pliki txt", "*.txt"), ("Wszystkie pliki", "*.*")))
Pole4.delete(0, 'end')
Pole4.insert(0, Browse4.filename)
Browse4 = TK.Button(Ramka1)
Browse4.config(text = '...')
Browse4.config(command = Browse1_Dialog)
Browse4.config(bg = B_przycisktlo, fg = B_przycisktext, relief = 'flat', activebackground = B_przycisktlo)
Browse4.grid(row = wiersz, column = 2, padx = 5, pady = 3)
# Frame2 - Eksport
Ramka2 = TK.LabelFrame(MainWindow)
Ramka2.config(text = ' Ustawienia eksportu ')
Ramka2.config(bg = B_tlo, fg = B_text)
Ramka2.config(borderwidth = B_framewielkosc)
Ramka2.grid(row = 2)
# Ścieżka folderu do zapisu wygenerowanych plików
textExport = TK.StringVar()
OpisPolaExport = TK.Label(Ramka2)
OpisPolaExport.config(text = 'Lokalizacja')
OpisPolaExport.config(width = SzerokoscOpisu)
OpisPolaExport.config(bg = B_tlo, fg = B_text, relief = 'flat', activebackground = B_przycisktlo)
OpisPolaExport.grid(row=0, column=0)
PoleExport = TK.Entry(Ramka2)
PoleExport.config(textvariable = textExport)
PoleExport.config(width = SzerokoscPola)
PoleExport.config(bg = B_entrytlo, fg = B_text)
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)
BrowseExport.config(text='...')
BrowseExport.config(command=BrowseExport_Dialog)
BrowseExport.config(bg = B_przycisktlo, fg = B_przycisktext, relief='flat', activebackground = B_przycisktlo)
BrowseExport.grid(row=0, column=2, padx=5, pady=3)
# Przycisk START
def PathPreprocess():
if MDdlg.Ask(A001):
while True:
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:
MDdlg.Err(E003x01)
break
if sciezkaExport_puste:
MDdlg.Err(E003x02)
break
KontenerDanych = []
if not sciezka1_puste:
try:
x = open(sciezka1)
except FileNotFoundError:
MDdlg.Err(E003x111)
else:
with open(sciezka1, 'r') as plik1:
KontenerDanych += MDfmt.przetworz(plik1.read())
if not sciezka2_puste:
try:
x = open(sciezka2)
except FileNotFoundError:
MDdlg.Err(E003x112)
else:
with open(sciezka2, 'r') as plik2:
KontenerDanych += MDfmt.przetworz(plik2.read())
if not sciezka3_puste:
try:
x = open(sciezka3)
except FileNotFoundError:
MDdlg.Err(E003x113)
else:
with open(sciezka3, 'r') as plik3:
KontenerDanych += MDfmt.przetworz(plik3.read())
if not sciezka4_puste:
try:
x = open(sciezka4)
except FileNotFoundError:
MDdlg.Err(E003x114)
else:
with open(sciezka4, 'r') as plik4:
KontenerDanych += MDfmt.przetworz(plik4.read())
break
MDprc.do(KontenerDanych, sciezkaExport)
else:
# Przycisk START
def PathPreprocess():
pass
PrzyciskSTART = TK.Button(MainWindow)
PrzyciskSTART.config(text = 'START')
PrzyciskSTART.config(command = PathPreprocess)
PrzyciskSTART.config(width = 50)
PrzyciskSTART.config(bg = B_przycisktlo, fg = B_przycisktext, relief = 'flat', activebackground = B_przycisktlo)
PrzyciskSTART.grid(row = 3, pady = 15)
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)
# Pasek dolny
PasekDolny = TK.LabelFrame(MainWindow)
PasekDolny.config(bd = 0, bg = B_tytultlo, fg = B_tytultext)
PasekDolny.grid(row = 4)
# 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)
InfoLabel = TK.Label(PasekDolny)
InfoLabel.config(text = 'GeneratorCSV 3.0 | © Mateusz Skoczek 2019 dla ZSP Sobolew')
InfoLabel.config(justify = 'left', anchor='w', width=107)
InfoLabel.config(bg = B_tytultlo, fg = B_tytultext)
InfoLabel.grid(row=0, column=0)
def InfoOpen():
try:
x = open('instrukcja.txt')
except FileNotFoundError:
MDdlg.Err(E001x02)
# Frame1 - Motyw
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)
Motyw_var = TK.StringVar()
if int(MDlcg.read()[0]) == 1:
Motyw_var.set('Ciemny')
Motyw_list_set = 'Ciemny'
else:
OS.system("notepad instrukcja.txt")
Motyw_var.set('Jasny')
Motyw_list_set = 'Jasny'
PrzyciskINFO = TK.Button(PasekDolny)
PrzyciskINFO.config(text = 'Instrukcja')
PrzyciskINFO.config(command = InfoOpen)
PrzyciskINFO.config(bg = B_przycisktlo, fg = B_przycisktext, relief = 'flat', activebackground = B_przycisktlo)
PrzyciskINFO.grid(row = 0, column = 1, padx = 5, pady = 5)
Motyw_list = TKttk.Combobox(Ramka1)
Motyw_list.config(textvariable = Motyw_var)
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.set(Motyw_list_set)
PrzyciskUSTAWIENIA = TK.Button(PasekDolny)
PrzyciskUSTAWIENIA.config(text = 'Ustawienia')
PrzyciskUSTAWIENIA.config(command = settings)
PrzyciskUSTAWIENIA.config(bg = B_przycisktlo, fg = B_przycisktext, relief = 'flat')
PrzyciskUSTAWIENIA.grid(row = 0, column = 2, padx = 5, pady = 5)
MainWindow.mainloop()
# Frame2 - Kodowanie
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)
main()
Code_var = TK.StringVar()
Code_var.set(MDlcg.read()[1])
Code_list = TKttk.Combobox(Ramka2)
Code_list.config(textvariable = Code_var)
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
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)
# Frame4 - Stałe
Ramka4 = TK.LabelFrame(self)
Ramka4.config(text = ' Stałe ')
Ramka4.config(bg = M_tlo)
Ramka4.config(fg = M_text)
Ramka4.config(borderwidth = M_framewielkosc)
Ramka4.grid(row = 4, pady = 5)
DomenaLabel = TK.Label(Ramka4)
DomenaLabel.config(text = 'Domena')
DomenaLabel.config(width = SzerokoscOpisu3)
DomenaLabel.config(bg = M_tlo)
DomenaLabel.config(fg = M_text)
DomenaLabel.grid(row = 0, column = 0)
text1 = TK.StringVar()
PoleDomena = TK.Entry(Ramka4)
PoleDomena.config(textvariable = text1)
PoleDomena.config(width = 83)
PoleDomena.config(bg = M_entrytlo)
PoleDomena.config(fg = M_text)
PoleDomena.grid(row = 0, column = 1, padx = 5, pady = 5)
PoleDomena.insert(0, MDlcg.read()[2])
QuotaLabel = TK.Label(Ramka4)
QuotaLabel.config(text = 'Quota (MB)')
QuotaLabel.config(width = SzerokoscOpisu3)
QuotaLabel.config(bg = M_tlo)
QuotaLabel.config(fg = M_text)
QuotaLabel.grid(row = 1, column = 0)
value2 = TK.IntVar()
PoleQuota = TK.Spinbox(Ramka4)
PoleQuota.config(textvariable = value2)
PoleQuota.config(from_ = 1, to = 100000)
PoleQuota.config(width = 81)
PoleQuota.config(bg = M_entrytlo)
PoleQuota.config(fg = M_text)
PoleQuota.grid(row=1, column=1, padx=5, pady=5)
PoleQuota.insert(0, int(MDlcg.read()[3]))
print(int(MDlcg.read()[3]))
OknoGlowne = Main()
OknoGlowne.run()

View File

@@ -1,2 +1,5 @@
Ciemny motyw(0/1): 1
Kodowanie wyjsciowe: utf-8
Kodowanie wyjsciowe: utf-8
Domena: losobolew.pl
Quota: 500
Kraj: Rzeczypospolita Polska

View File

@@ -0,0 +1,5 @@
K O N, I X L X
Q
<separator>
N, I X L X
Q