4.0 Alpha (Build 19346)
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
<module type="PYTHON_MODULE" version="4">
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$" />
|
||||
<orderEntry type="jdk" jdkName="Python 3.8 (Zadanie 4)" jdkType="Python SDK" />
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
<component name="TestRunnerService">
|
||||
2
.idea/modules.xml
generated
2
.idea/modules.xml
generated
@@ -2,7 +2,7 @@
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/GeneratorCSV.iml" filepath="$PROJECT_DIR$/.idea/GeneratorCSV.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/GeneratorCSV 3.1.iml" filepath="$PROJECT_DIR$/.idea/GeneratorCSV 3.1.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
||||
47
.idea/workspace.xml
generated
47
.idea/workspace.xml
generated
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="f2c161d8-ce90-4812-beb4-a44c9013c541" name="Default Changelist" comment="" />
|
||||
<list default="true" id="a4251987-c37e-4856-aaee-adde546bed78" name="Default Changelist" comment="" />
|
||||
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
@@ -15,10 +15,9 @@
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="ProjectId" id="1UCu6ZWXUKDrAFKKgXFMJB1R5q3" />
|
||||
<component name="ProjectId" id="1ULHfQb5VkZDNLqAqiV5YEYWfmE" />
|
||||
<component name="PropertiesComponent">
|
||||
<property name="WebServerToolWindowFactoryState" value="false" />
|
||||
<property name="settings.editor.selected.configurable" value="com.jetbrains.python.configuration.PyActiveSdkModuleConfigurable" />
|
||||
</component>
|
||||
<component name="RunDashboard">
|
||||
<option name="ruleStates">
|
||||
@@ -32,9 +31,9 @@
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="RunManager" selected="Python.generator">
|
||||
<component name="RunManager">
|
||||
<configuration name="generator" type="PythonConfigurationType" factoryName="Python" temporary="true">
|
||||
<module name="GeneratorCSV" />
|
||||
<module name="GeneratorCSV 3.1" />
|
||||
<option name="INTERPRETER_OPTIONS" value="" />
|
||||
<option name="PARENT_ENVS" value="true" />
|
||||
<envs>
|
||||
@@ -55,32 +54,9 @@
|
||||
<option name="INPUT_FILE" value="" />
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
<configuration name="test" type="PythonConfigurationType" factoryName="Python" temporary="true">
|
||||
<module name="GeneratorCSV" />
|
||||
<option name="INTERPRETER_OPTIONS" value="" />
|
||||
<option name="PARENT_ENVS" value="true" />
|
||||
<envs>
|
||||
<env name="PYTHONUNBUFFERED" value="1" />
|
||||
</envs>
|
||||
<option name="SDK_HOME" value="" />
|
||||
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
||||
<option name="IS_MODULE_SDK" value="true" />
|
||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
|
||||
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/test.py" />
|
||||
<option name="PARAMETERS" value="" />
|
||||
<option name="SHOW_COMMAND_LINE" value="false" />
|
||||
<option name="EMULATE_TERMINAL" value="false" />
|
||||
<option name="MODULE_MODE" value="false" />
|
||||
<option name="REDIRECT_INPUT" value="false" />
|
||||
<option name="INPUT_FILE" value="" />
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
<recent_temporary>
|
||||
<list>
|
||||
<item itemvalue="Python.generator" />
|
||||
<item itemvalue="Python.test" />
|
||||
</list>
|
||||
</recent_temporary>
|
||||
</component>
|
||||
@@ -89,16 +65,12 @@
|
||||
</component>
|
||||
<component name="TaskManager">
|
||||
<task active="true" id="Default" summary="Default task">
|
||||
<changelist id="f2c161d8-ce90-4812-beb4-a44c9013c541" name="Default Changelist" comment="" />
|
||||
<created>1574872723273</created>
|
||||
<changelist id="a4251987-c37e-4856-aaee-adde546bed78" name="Default Changelist" comment="" />
|
||||
<created>1575129057993</created>
|
||||
<option name="number" value="Default" />
|
||||
<option name="presentableId" value="Default" />
|
||||
<updated>1574872723273</updated>
|
||||
<workItem from="1574872724849" duration="19564000" />
|
||||
<workItem from="1574945757291" duration="32858000" />
|
||||
<workItem from="1575021304049" duration="1032000" />
|
||||
<workItem from="1575022913504" duration="500000" />
|
||||
<workItem from="1575031053599" duration="646000" />
|
||||
<updated>1575129057993</updated>
|
||||
<workItem from="1575129059395" duration="10526000" />
|
||||
</task>
|
||||
<servers />
|
||||
</component>
|
||||
@@ -106,7 +78,6 @@
|
||||
<option name="version" value="1" />
|
||||
</component>
|
||||
<component name="com.intellij.coverage.CoverageDataManagerImpl">
|
||||
<SUITE FILE_PATH="coverage/GeneratorCSV$test.coverage" NAME="test Coverage Results" MODIFIED="1574890328703" 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/GeneratorCSV$generator.coverage" NAME="generator Coverage Results" MODIFIED="1575023380703" 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/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$" />
|
||||
</component>
|
||||
</project>
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
6
changelog-UC.txt
Normal file
6
changelog-UC.txt
Normal file
@@ -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')
|
||||
@@ -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
|
||||
BIN
components/__pycache__/dialog.cpython-38.pyc
Normal file
BIN
components/__pycache__/dialog.cpython-38.pyc
Normal file
Binary file not shown.
BIN
components/__pycache__/load_config.cpython-38.pyc
Normal file
BIN
components/__pycache__/load_config.cpython-38.pyc
Normal file
Binary file not shown.
49
components/dialog.py
Normal file
49
components/dialog.py
Normal file
@@ -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
|
||||
20
components/load_config.py
Normal file
20
components/load_config.py
Normal file
@@ -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
|
||||
220
components/main.py
Normal file
220
components/main.py
Normal file
@@ -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()
|
||||
"""
|
||||
@@ -1 +1,2 @@
|
||||
Ciemny motyw: 1
|
||||
Kodowanie: utf-8
|
||||
141
format.py
141
format.py
@@ -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:
|
||||
# <Klasa> <Nazwisko>, <Imie> <X> <Login do librusa> <X>
|
||||
# <Q>
|
||||
|
||||
# Przykład:
|
||||
# 1a BS Nowak, Adam <NieznaczaceDane> 1234567u <NieznaczaceDane>
|
||||
#
|
||||
|
||||
|
||||
# Format danych dla nauczycieli:
|
||||
# <Nazwisko>, <Imie> <X> <Login do Librusa> <X>
|
||||
# <Q>
|
||||
|
||||
# Przykład:
|
||||
# Nowak, Adam <NieznaczaceDane> 1234567 <NieznaczaceDane>
|
||||
#
|
||||
|
||||
|
||||
|
||||
|
||||
# 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
|
||||
397
generator.py
397
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)
|
||||
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:
|
||||
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()
|
||||
|
||||
#_______________________________________________________________________________________________#
|
||||
OS.system("components\main.py")
|
||||
|
||||
51
moduly.py
51
moduly.py
@@ -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
|
||||
Reference in New Issue
Block a user