Files
GeneratorCSV/generator.py

442 lines
17 KiB
Python
Raw Normal View History

2020-08-06 18:10:55 +02:00
"""
2020-08-06 18:26:57 +02:00
# Generator CSV
2020-08-06 18:33:32 +02:00
# 4.0 Experimental
2020-08-06 18:00:05 +02:00
# by Mateusz Skoczek
2020-08-06 18:33:32 +02:00
# styczeń 2019 - luty 2020
2020-08-06 18:00:05 +02:00
# dla ZSP Sobolew
2020-08-06 17:37:15 +02:00
2020-08-06 18:10:55 +02:00
#
2020-08-06 18:26:57 +02:00
# Główny plik programu
2020-08-06 18:10:55 +02:00
#
"""
2020-08-06 17:37:15 +02:00
2020-08-06 18:33:32 +02:00
# -------------------- # Import bibliotek zewnętrznych # -------------------- #
2020-08-06 17:37:15 +02:00
2020-08-06 18:33:32 +02:00
# Biblioteki główne
2020-08-06 18:26:57 +02:00
import os as OS
import sys as SS
2020-08-06 18:33:32 +02:00
import time as TM
2020-08-06 18:26:57 +02:00
2020-08-06 18:33:32 +02:00
# Framework i inne biblioteki interfejsu graficznego
2020-08-06 18:26:57 +02:00
import tkinter as TK
from tkinter import ttk as TKttk
2020-08-06 18:33:32 +02:00
from tkinter import filedialog as TKfld
2020-08-06 18:26:57 +02:00
2020-08-06 18:33:32 +02:00
try:
from PIL import ImageTk as PLitk
from PIL import Image as PLimg
except ModuleNotFoundError:
OS.system("python -m pip install pip")
OS.system("python -m pip install Pillow")
OS.system("cls")
from PIL import ImageTk as PLitk
from PIL import Image as PLimg
2020-08-06 18:26:57 +02:00
2020-08-06 18:33:32 +02:00
# ------------------ # Import plików składowych programu # ------------------ #
2020-08-06 18:26:57 +02:00
2020-08-06 18:33:32 +02:00
# Funkcja tworząca plik zawierający logi błędu
def excpt(filename, importingFilename, errorcode, exceptInfo):
filepath = './crashlogs/crash_' + str(TM.localtime()[2]) + str(TM.localtime()[1]) + str(TM.localtime()[0]) + str(TM.localtime()[3]) + str(TM.localtime()[4]) + str(TM.localtime()[5]) + '.txt'
try:
OS.mkdir('./crashlogs')
except:
pass
crashfile = open(filepath, 'w')
crashfile.write('CRASH!\n')
crashfile.write('An error occurred while loading the component file: %s\n' % importingFilename)
crashfile.write('In file: %s\n' % filename)
crashfile.write('%s\n' % exceptInfo)
crashfile.write('Errorcode: %s' % errorcode)
crashfile.close()
SS.exit(0)
2020-08-06 18:26:57 +02:00
2020-08-06 18:33:32 +02:00
# vars.py
try:
from src.vars import prgInfo as SCvar_inf
from src.vars import guiVars as SCvar_gui
except Exception as exceptInfo:
excpt('generator.py', 'variables.py', 'E000000', exceptInfo) #TODO Kod
# -------------------------------- # Okno # --------------------------------- #
# Budowa okna
def gui():
# Ustawienia okna
root = TK.Tk()
root.title(SCvar_inf.name + " " + SCvar_inf.version)
root.resizable(width = SCvar_gui.other.windowWidthResize, height = SCvar_gui.other.windowHeightResize)
root.configure(bg = SCvar_gui.color.mainBG)
root.iconbitmap(SCvar_gui.image.programIcon)
# Motyw
TKttk.Style().theme_create("main", parent = "alt", settings = {
"mainMenu.TNotebook":{
"configure": {
"background": SCvar_gui.color.mainBG,
"tabposition": SCvar_gui.other.tabPosition,
"borderwidth": SCvar_gui.dimension.tabWindowBorderWidth,
}
},
"mainMenu.TNotebook.Tab":{
"configure": {
"background": SCvar_gui.color.unselectedTabBG,
"borderwidth": SCvar_gui.dimension.borderTab,
"padding": SCvar_gui.dimension.iconPaddingTab,
},
"map": {
"background": [("selected", SCvar_gui.color.selectedTabBG), ("disabled", SCvar_gui.color.headerBG)],
}
}
})
TKttk.Style().theme_use("main")
# Menu główne
mainMenu = TKttk.Notebook(root)
mainMenu.config(style = "mainMenu.TNotebook")
mainMenu.grid(row = 1)
# TAB1 - Ikona
iconTab = TK.Frame(mainMenu)
iconTab.config(background = SCvar_gui.color.mainBG)
iconTabImg = PLimg.open(SCvar_gui.image.iconTab)
iconTabImg = iconTabImg.resize((SCvar_gui.dimension.iconTab, SCvar_gui.dimension.iconTab), PLimg.ANTIALIAS)
iconTabImg = PLitk.PhotoImage(iconTabImg)
mainMenu.add(iconTab, image = iconTabImg, state = TK.DISABLED)
2020-08-06 18:35:18 +02:00
# Generowanie plików
2020-08-06 18:33:32 +02:00
generateTab = TK.Frame(mainMenu)
generateTab.config(background = SCvar_gui.color.mainBG)
generateTabImg = PLimg.open(SCvar_gui.image.generateTab)
generateTabImg = generateTabImg.resize((SCvar_gui.dimension.iconTab, SCvar_gui.dimension.iconTab), PLimg.ANTIALIAS)
generateTabImg = PLitk.PhotoImage(generateTabImg)
mainMenu.add(generateTab, image = generateTabImg)
2020-08-06 18:35:18 +02:00
# Dołączanie do pliku
2020-08-06 18:33:32 +02:00
linkTab = TK.Frame(mainMenu)
linkTab.config(background = SCvar_gui.color.mainBG)
linkTabImg = PLimg.open(SCvar_gui.image.linkTab)
linkTabImg = linkTabImg.resize((SCvar_gui.dimension.iconTab, SCvar_gui.dimension.iconTab), PLimg.ANTIALIAS)
linkTabImg = PLitk.PhotoImage(linkTabImg)
mainMenu.add(linkTab, image = linkTabImg)
2020-08-06 18:35:18 +02:00
# Łączenie plików
2020-08-06 18:33:32 +02:00
mergeTab = TK.Frame(mainMenu)
mergeTab.config(background = SCvar_gui.color.mainBG)
mergeTabImg = PLimg.open(SCvar_gui.image.mergeTab)
mergeTabImg = mergeTabImg.resize((SCvar_gui.dimension.iconTab, SCvar_gui.dimension.iconTab), PLimg.ANTIALIAS)
mergeTabImg = PLitk.PhotoImage(mergeTabImg)
mainMenu.add(mergeTab, image = mergeTabImg)
2020-08-06 18:35:18 +02:00
# Ustawienia
2020-08-06 18:33:32 +02:00
settingsTab = TK.Frame(mainMenu)
settingsTab.config(background = SCvar_gui.color.mainBG)
settingsTabImg = PLimg.open(SCvar_gui.image.settingsTab)
settingsTabImg = settingsTabImg.resize((SCvar_gui.dimension.iconTab, SCvar_gui.dimension.iconTab), PLimg.ANTIALIAS)
settingsTabImg = PLitk.PhotoImage(settingsTabImg)
mainMenu.add(settingsTab, image = settingsTabImg)
2020-08-06 18:35:18 +02:00
# Format danych
formatTab = TK.Frame(mainMenu)
formatTab.config(background = SCvar_gui.color.mainBG)
formatTabImg = PLimg.open(SCvar_gui.image.formatTab)
formatTabImg = formatTabImg.resize((SCvar_gui.dimension.iconTab, SCvar_gui.dimension.iconTab), PLimg.ANTIALIAS)
formatTabImg = PLitk.PhotoImage(formatTabImg)
mainMenu.add(formatTab, image = formatTabImg)
# Informacje
2020-08-06 18:33:32 +02:00
infoTab = TK.Frame(mainMenu)
infoTab.config(background = SCvar_gui.color.mainBG)
infoTabImg = PLimg.open(SCvar_gui.image.infoTab)
infoTabImg = infoTabImg.resize((SCvar_gui.dimension.iconTab, SCvar_gui.dimension.iconTab), PLimg.ANTIALIAS)
infoTabImg = PLitk.PhotoImage(infoTabImg)
mainMenu.add(infoTab, image = infoTabImg)
# TAB2
tab2Label = TK.Label(generateTab)
tab2Label.config(text = 'GENEROWANIE PLIKÓW CSV')
tab2Label.config(font = (SCvar_gui.fonts.tabHeader[0], SCvar_gui.fonts.tabHeader[1]))
tab2Label.config(bg = SCvar_gui.color.headerBG)
tab2Label.config(fg = SCvar_gui.color.headerText)
tab2Label.config(bd = SCvar_gui.dimension.tabHeaderHeight)
tab2Label.config(width = SCvar_gui.dimension.tabHeaderWidth)
tab2Label.grid(row = 0)
# TAB3
tab3Label = TK.Label(linkTab)
tab3Label.config(text = 'DOŁĄCZANIE DO PLIKU CSV')
tab3Label.config(font = (SCvar_gui.fonts.tabHeader[0], SCvar_gui.fonts.tabHeader[1]))
tab3Label.config(bg = SCvar_gui.color.headerBG)
tab3Label.config(fg = SCvar_gui.color.headerText)
tab3Label.config(bd = SCvar_gui.dimension.tabHeaderHeight)
tab3Label.config(width = SCvar_gui.dimension.tabHeaderWidth)
tab3Label.grid(row = 0)
# TAB4
tab4Label = TK.Label(mergeTab)
tab4Label.config(text = 'ŁĄCZENIE PLIKÓW CSV')
tab4Label.config(font = (SCvar_gui.fonts.tabHeader[0], SCvar_gui.fonts.tabHeader[1]))
tab4Label.config(bg = SCvar_gui.color.headerBG)
tab4Label.config(fg = SCvar_gui.color.headerText)
tab4Label.config(bd = SCvar_gui.dimension.tabHeaderHeight)
tab4Label.config(width = SCvar_gui.dimension.tabHeaderWidth)
tab4Label.grid(row = 0)
2020-08-06 18:35:18 +02:00
# SETTINGSTAB
settingsTabLabel = TK.Label(settingsTab)
settingsTabLabel.config(text = 'USTAWIENIA')
settingsTabLabel.config(font = (SCvar_gui.fonts.tabHeader[0], SCvar_gui.fonts.tabHeader[1]))
settingsTabLabel.config(bg = SCvar_gui.color.headerBG)
settingsTabLabel.config(fg = SCvar_gui.color.headerText)
settingsTabLabel.config(bd = SCvar_gui.dimension.tabHeaderHeight)
settingsTabLabel.config(width = SCvar_gui.dimension.tabHeaderWidth)
settingsTabLabel.grid(row = 0)
# FORMATTAB
formatTabLabel = TK.Label(formatTab)
formatTabLabel.config(text = 'FORMAT DANYCH')
formatTabLabel.config(font = (SCvar_gui.fonts.tabHeader[0], SCvar_gui.fonts.tabHeader[1]))
formatTabLabel.config(bg = SCvar_gui.color.headerBG)
formatTabLabel.config(fg = SCvar_gui.color.headerText)
formatTabLabel.config(bd = SCvar_gui.dimension.tabHeaderHeight)
formatTabLabel.config(width = SCvar_gui.dimension.tabHeaderWidth)
formatTabLabel.grid(row = 0)
# Labelframe - Pliki wejściowe
inFilesLabelFrame = TK.LabelFrame(formatTab)
inFilesLabelFrame.config(text = ' Pliki wejściowe ')
inFilesLabelFrame.config(bg = SCvar_gui.color.mainBG)
inFilesLabelFrame.config(fg = SCvar_gui.color.lfText)
inFilesLabelFrame.config(bd = SCvar_gui.dimension.lfBorderwidth)
inFilesLabelFrame.grid(row = 1, pady = SCvar_gui.dimension.framePadY)
# UczniowieLABEL
inStudentsLABEL = TK.Label(inFilesLabelFrame)
inStudentsLABEL.config(text = 'Uczniowie')
inStudentsLABEL.config(bg = SCvar_gui.color.mainBG)
inStudentsLABEL.config(fg = SCvar_gui.color.label1)
inStudentsLABEL.grid(row = 0, column = 0)
# Uczniowie inFormatInput
inStudentsFormatInput = TK.Text(inFilesLabelFrame)
inStudentsFormatInput.config(bg = SCvar_gui.color.textboxBG)
inStudentsFormatInput.config(fg = SCvar_gui.color.textboxText)
inStudentsFormatInput.config(bd = SCvar_gui.dimension.tbBorderwidth)
inStudentsFormatInput.config(width = SCvar_gui.dimension.tbWidth)
inStudentsFormatInput.config(height = SCvar_gui.dimension.tbHeight)
inStudentsFormatInput.grid(row = 1, column = 0, padx = SCvar_gui.dimension.tbPad, pady = SCvar_gui.dimension.tbPad)
# NauczycieleLABEL
inTeachersLABEL = TK.Label(inFilesLabelFrame)
inTeachersLABEL.config(text = 'Nauczyciele')
inTeachersLABEL.config(bg = SCvar_gui.color.mainBG)
inTeachersLABEL.config(fg = SCvar_gui.color.label1)
inTeachersLABEL.grid(row = 0, column = 1)
# Nauczyciele inFormatInput
inTeachersFormatInput = TK.Text(inFilesLabelFrame)
inTeachersFormatInput.config(bg = SCvar_gui.color.textboxBG)
inTeachersFormatInput.config(fg = SCvar_gui.color.textboxText)
inTeachersFormatInput.config(bd = SCvar_gui.dimension.tbBorderwidth)
inTeachersFormatInput.config(width = SCvar_gui.dimension.tbWidth)
inTeachersFormatInput.config(height = SCvar_gui.dimension.tbHeight)
inTeachersFormatInput.grid(row = 1, column = 1, padx = SCvar_gui.dimension.tbPad, pady = SCvar_gui.dimension.tbPad)
# Labelframe - Pliki wejściowe
outFilesLabelFrame = TK.LabelFrame(formatTab)
outFilesLabelFrame.config(text = ' Pliki wyjściowe ')
outFilesLabelFrame.config(bg = SCvar_gui.color.mainBG)
outFilesLabelFrame.config(fg = SCvar_gui.color.lfText)
outFilesLabelFrame.config(bd = SCvar_gui.dimension.lfBorderwidth)
outFilesLabelFrame.grid(row = 2, pady = SCvar_gui.dimension.framePadY)
# UczniowieLABEL
outStudentsLABEL = TK.Label(outFilesLabelFrame)
outStudentsLABEL.config(text = 'Uczniowie')
outStudentsLABEL.config(bg = SCvar_gui.color.mainBG)
outStudentsLABEL.config(fg = SCvar_gui.color.label1)
outStudentsLABEL.grid(row = 0, column = 0)
# Uczniowie outFormatInput
outStudentsFormatInput = TK.Entry(outFilesLabelFrame)
outStudentsFormatInput.config(bg = SCvar_gui.color.textboxBG)
outStudentsFormatInput.config(fg = SCvar_gui.color.textboxText)
outStudentsFormatInput.config(bd = SCvar_gui.dimension.tbBorderwidth)
outStudentsFormatInput.config(width = SCvar_gui.dimension.tbWidth2)
outStudentsFormatInput.grid(row = 1, column = 0, padx = SCvar_gui.dimension.tbPad, pady = SCvar_gui.dimension.tbPad)
# NauczycieleLABEL
outTeachersLABEL = TK.Label(outFilesLabelFrame)
outTeachersLABEL.config(text = 'Nauczyciele')
outTeachersLABEL.config(bg = SCvar_gui.color.mainBG)
outTeachersLABEL.config(fg = SCvar_gui.color.label1)
outTeachersLABEL.grid(row = 0, column = 1)
# Nauczyciele outFormatInput
outTeachersFormatInput = TK.Entry(outFilesLabelFrame)
outTeachersFormatInput.config(bg = SCvar_gui.color.textboxBG)
outTeachersFormatInput.config(fg = SCvar_gui.color.textboxText)
outTeachersFormatInput.config(bd = SCvar_gui.dimension.tbBorderwidth)
outTeachersFormatInput.config(width = SCvar_gui.dimension.tbWidth2)
outTeachersFormatInput.grid(row = 1, column = 1, padx = SCvar_gui.dimension.tbPad, pady = SCvar_gui.dimension.tbPad)
# Frame - Przyciski
formatButtonsFrame = TK.Frame(formatTab)
formatButtonsFrame.config(bg = SCvar_gui.color.mainBG)
formatButtonsFrame.grid(row = 3, pady = SCvar_gui.dimension.framePadY)
# Zapisz
saveFormatButton = TK.Button(formatButtonsFrame)
saveFormatButton.config(text = 'ZAPISZ')
saveFormatButton.config(bg = SCvar_gui.color.buttonBG)
saveFormatButton.config(fg = SCvar_gui.color.buttonText)
saveFormatButton.config(relief = TK.FLAT)
saveFormatButton.config(activebackground = SCvar_gui.color.buttonBG)
saveFormatButton.config(activeforeground = SCvar_gui.color.buttonText)
saveFormatButton.config(height = SCvar_gui.dimension.bnHeight)
saveFormatButton.config(width = SCvar_gui.dimension.bnWidth)
saveFormatButton.grid(row = 0, column = 0, padx = 5)
# Pomoc
def saveFormatButtonCommand():
try:
x = open('format_readme.txt')
except FileNotFoundError:
print('x')
except:
print('x')
else:
OS.system("notepad format_readme.txt")
instructionFormatButton = TK.Button(formatButtonsFrame)
instructionFormatButton.config(text = 'POMOC')
instructionFormatButton.config(bg = SCvar_gui.color.buttonBG)
instructionFormatButton.config(fg = SCvar_gui.color.buttonText)
instructionFormatButton.config(relief = TK.FLAT)
instructionFormatButton.config(activebackground = SCvar_gui.color.buttonBG)
instructionFormatButton.config(activeforeground = SCvar_gui.color.buttonText)
instructionFormatButton.config(height = SCvar_gui.dimension.bnHeight)
instructionFormatButton.config(width = SCvar_gui.dimension.bnWidth2)
instructionFormatButton.config(command = saveFormatButtonCommand)
instructionFormatButton.grid(row = 0, column = 1, padx = 5)
# INFOTAB
infoTabLabel = TK.Label(infoTab)
infoTabLabel.config(text = 'INFORMACJE')
infoTabLabel.config(font = (SCvar_gui.fonts.tabHeader[0], SCvar_gui.fonts.tabHeader[1]))
infoTabLabel.config(bg = SCvar_gui.color.headerBG)
infoTabLabel.config(fg = SCvar_gui.color.headerText)
infoTabLabel.config(bd = SCvar_gui.dimension.tabHeaderHeight)
infoTabLabel.config(width = SCvar_gui.dimension.tabHeaderWidth)
infoTabLabel.grid(row = 0)
2020-08-06 18:33:32 +02:00
# Separator1
separator1 = TK.Label(infoTab)
separator1.config(bg = SCvar_gui.color.mainBG)
separator1.config(height = SCvar_gui.dimension.separator1Height)
separator1.grid(row = 1)
# Ikona
programIcon = PLimg.open(SCvar_gui.image.programIconOther)
programIcon = programIcon.resize((SCvar_gui.dimension.programIconInInfo, SCvar_gui.dimension.programIconInInfo), PLimg.ANTIALIAS)
programIcon = PLitk.PhotoImage(programIcon)
programIconPlace = TK.Label(infoTab)
programIconPlace.config(image = programIcon)
programIconPlace.config(background = SCvar_gui.color.mainBG)
programIconPlace.config(height = SCvar_gui.dimension.programIconInInfoPlace)
programIconPlace.grid(row = 2)
# Nazwa programu
programName = TK.Label(infoTab)
programName.config(text = SCvar_inf.name)
programName.config(font = (SCvar_gui.fonts.info1[0], SCvar_gui.fonts.info1[1]))
programName.config(background = SCvar_gui.color.mainBG)
programName.config(foreground = SCvar_gui.color.headerText)
programName.grid(row = 3)
# Wersja programu
programVersion = TK.Label(infoTab)
programVersion.config(text = 'Wersja ' + SCvar_inf.version)
programVersion.config(font = (SCvar_gui.fonts.info1[0], SCvar_gui.fonts.info1[2]))
programVersion.config(background = SCvar_gui.color.mainBG)
programVersion.config(foreground = SCvar_gui.color.headerText)
programVersion.grid(row = 4)
# Separator2
separator2 = TK.Label(infoTab)
separator2.config(bg = SCvar_gui.color.mainBG)
separator2.config(height = SCvar_gui.dimension.separator2Height)
separator2.grid(row = 5)
# Copyright
copyrightInfo = TK.Label(infoTab)
copyrightInfo.config(text = '© ' + SCvar_inf.years)
copyrightInfo.config(font = (SCvar_gui.fonts.info1[0], SCvar_gui.fonts.info1[3]))
copyrightInfo.config(background = SCvar_gui.color.mainBG)
copyrightInfo.config(foreground = SCvar_gui.color.headerText)
copyrightInfo.grid(row = 6)
# Autorzy
authorsInfo = TK.Label(infoTab)
2020-08-06 18:35:18 +02:00
authorsInfo.config(text = SCvar_inf.authors + '\ndla ' + SCvar_inf.school)
2020-08-06 18:33:32 +02:00
authorsInfo.config(font = (SCvar_gui.fonts.info1[0], SCvar_gui.fonts.info1[4]))
authorsInfo.config(background = SCvar_gui.color.mainBG)
authorsInfo.config(foreground = SCvar_gui.color.headerText)
authorsInfo.grid(row = 7)
# Separator3
separator3 = TK.Label(infoTab)
separator3.config(bg = SCvar_gui.color.mainBG)
separator3.config(height = SCvar_gui.dimension.separator3Height)
separator3.grid(row = 8)
# Mainloop
root.mainloop()
# Inicjacja okna
gui()