""" # Generator CSV # Wersja 4.0 # Autorzy: Mateusz Skoczek # Styczeń 2019 - Czerwiec 2020 # dla ZSP Sobolew """ # ----------------------------------------- # Zmienne # ----------------------------------------- # class VAR: programName = 'Generator CSV' programVersion = '4.0' programCustomer = 'ZSP Sobolew' programAuthors = ['Mateusz Skoczek'] programToW = ['styczeń', 2019, 'wrzesień', 2020] # --------------------------- # Import wbudowanych bibliotek Pythona # -------------------------- # # Główne import sys as SS import os as OS import time as TM import codecs as CD import pathlib as PT import shutil as SU # GUI import tkinter as TK from tkinter import ttk as TKttk from tkinter import messagebox as TKmsb from tkinter import filedialog as TKfld from PIL import ImageTk as PLitk from PIL import Image as PLimg # ---------------------------------------- # Komunikaty # --------------------------------------- # MSGlist = { 'E0000' : 'none', 'E0001' : 'Wystąpił błąd podczas inicjalizacji katalogu z plikami konfiguracyjnymi programu w katalogu %APPDATA%', 'E0002' : 'Wystąpił błąd podczas ładowania pliku konfiguracyjnego (config.cfg)', 'E0003' : 'Niepoprawne dane w pliku konfiguracyjnym (config.cfg)', 'E0004' : 'Wystąpił błąd podczas ładowania pliku stylu (style.cfg)', 'E0005' : 'Niepoprawne dane w pliku stylu (style.cfg)', 'E0006' : 'Niepoprawne dane w pliku formatu', 'A0001' : 'Czy chcesz zapisać? Zostanie utworzony nowy plik', 'A0002' : 'Czy chcesz zapisać? Plik zostanie nadpisany', 'A0003' : 'Czy chcesz rozpocząć przetwarzanie plików?', 'E0007' : 'Wymagany przynajmniej jeden plik wejściowy', 'E0008' : 'Nie można odnaleźć jednego z powyższych plików', 'E0009' : 'Nie można odnaleźć jednego z powyższych format presetów', } def MSG(code, terminate, *optionalInfo): try: optionalInfo[0] except: optionalInfo = ('', '') # Błędy if code[0] == 'E': TKmsb.showerror('Wystąpił błąd!', '%s\n%s' % (MSGlist[code], optionalInfo[0])) if terminate: SS.exit(0) # Informacja elif code[0] == 'I': TKmsb.showerror('Informacja', '%s\n%s' % (MSGlist[code], optionalInfo[0])) if terminate: SS.exit(0) # Ostrzeżenie elif code[0] == 'W': TKmsb.showwarning('Ostrzeżenie', '%s\n%s' % (MSGlist[code], optionalInfo[0])) if terminate: SS.exit(0) # Zapytania elif code[0] == 'A': if TKmsb.askokcancel('Pytanie', '%s\n%s' % (MSGlist[code], optionalInfo[0])): return True else: return False # ------------------------- # Sprawdzanie katalogu programu w APPDATA # ------------------------- # appdata = PT.Path.home() / 'Appdata/Roaming' #TODO SU.rmtree(str(appdata) + '/Generator CSV') #TODO if 'Generator CSV' not in [x for x in OS.listdir(appdata)]: try: OS.mkdir(str(appdata) + '/Generator CSV') SU.copy('default-configs/config.cfg', str(appdata) + '\Generator CSV\config.cfg') SU.copy('default-configs/style.cfg', str(appdata) + '\Generator CSV\style.cfg') OS.mkdir(str(appdata) + '/Generator CSV/format-presets') except Exception as exceptInfo: MSG('E0001', True, exceptInfo) # ----------------------------- # Ładowanie pliku konfiguracyjnego # ---------------------------- # class CFG: # Funkcje sprawdzające istnienie def __checkIfFileExist(self, write): if write: try: file = open((str(appdata) + '\Generator CSV\config.cfg'), 'a') except Exception as exceptInfo: MSG('E0002', False, exceptInfo) return False else: if not file.writable(): MSG('E0002', False, 'Plik tylko do odczytu') return False else: return True else: try: open(str(appdata) + '\Generator CSV\config.cfg') except Exception as exceptInfo: MSG('E0002', True, exceptInfo) def __checkIfRecordExist(self, content, record): if record in list(content.keys()): return [True] else: return [False, 'Brak danych - klucz: %s' % record] # Funkcje sprawdzające poprawność recordu def __checkSCA(self, write, record, var): if write: pass else: try: var = var[1:-2].split(', ') var = [x[1:-1] for x in var] except: return (False, 'Niepoprawne dane - klucz: %s' % record) for x in var: if len(x) != 1: return (False, 'Niepoprawne dane - klucz: %s' % record) return [True, var] def __checkI(self, write, record, var): if write: pass else: try: var = int(var) except: return (False, 'Niepoprawne dane - klucz: %s' % record) return [True, var] def __checkD(self, write, record, var): if write: pass else: varToReturn = {} var = var.split(' ') try: var[0] = var[0].split('.') var[1] = var[1].split(':') var = var[0] + var[1] dateLabels = ['D', 'M', 'Y', 'h', 'm', 's'] if len(var) != len(dateLabels): return (False, 'Niepoprawne dane - klucz: %s' % record) index = 0 for x in var: if x != '*': varToReturn[dateLabels[index]] = int(x) else: varToReturn[dateLabels[index]] = None index += 1 except: return (False, 'Niepoprawne dane - klucz: %s' % record) var = varToReturn return [True, var] def R(self, record): self.__checkIfFileExist(False) content = {} for x in CD.open((str(appdata) + '\Generator CSV\config.cfg'), 'r', 'utf-8').read().split('\n'): x = x.split(' = ') try: name = x[0].split('(')[0] var = x[1] type = x[0].split('(')[1].strip(')') content[name] = [var, type] except: continue checkingOutput = self.__checkIfRecordExist(content, record) if not checkingOutput[0]: MSG('E0003', True, checkingOutput[1]) var = content[record] if var[1] == 'S': # String var = var[0] return var elif var[1] == 'SCA': # Single char array checkingOutput = self.__checkSCA(False, record, var[0]) if checkingOutput[0]: return checkingOutput[1] else: MSG('E0003', True, checkingOutput[1]) elif var[1] == 'I': # Integer checkingOutput = self.__checkI(False, record, var[0]) if checkingOutput[0]: return checkingOutput[1] else: MSG('E0003', True, checkingOutput[1]) elif var[1] == 'D': # Date (DD.MM.RRRR HH:MM:SS) checkingOutput = self.__checkD(False, record, var[0]) if checkingOutput[0]: return checkingOutput[1] else: MSG('E0003', True, checkingOutput[1]) else: MSG('E0003', True, 'Nie można rozpoznać typu klucza %s' % record) def W(self): pass """ content = self.R() for x in changes: content[x] = changes[x] contentCheckingOutput = self.__checkContent(True, content) if contentCheckingOutput[0]: if self.__checkInstance(True): with CD.open((str(appdata) + '\Generator CSV\config.cfg'), 'w', 'utf-8') as file: contentToSave = contentCheckingOutput[1] for x in contentToSave: file.write('%s = %s\n' % (x, str(contentToSave[x]))) else: return False else: MSG('E0004', False, contentCheckingOutput[1]) """ CFG = CFG() # ---------------------------------- # Ładowanie pliku stylu # ---------------------------------- # class GUI: # Funkcje sprawdzające istnienie def __checkIfFileExist(self): try: open(str(appdata) + '\Generator CSV\style.cfg') except Exception as exceptInfo: MSG('E0004', True, exceptInfo) def __checkIfRecordExist(self, content, record): if record in list(content.keys()): return [True] else: return [False, 'Brak danych - klucz: %s' % record] # Funkcje sprawdzające poprawność rekordu def __checkI(self, record, var): try: var = int(var) except: return (False, 'Niepoprawne dane - klucz: %s' % record) return [True, var] def __checkB(self, record, var): try: var = int(var) except: return [False, 'Niepoprawne dane - klucz: %s' % record] if var != 0 and var != 1: return [False, 'Niepoprawne dane - klucz: %s' % record] else: if var == 0: var = False else: var = True return [True, var] def __checkC(self, record, var): if len(var) != 7: return [False, 'Niepoprawne dane - klucz: %s' % record] else: if var[0] != '#': return [False, 'Niepoprawne dane - klucz: %s' % record] return [True, var] def __checkP(self, record, var): try: check = open(var) except: return [False, 'Niepoprawne dane - klucz: %s' % record] return [True, var] def __checkFA(self, record, var, array): arrays = { 'position' : ['nw', 'ne', 'en', 'es', 'se', 'sw', 'ws', 'wn'], 'anchor' : ['center', 'nw', 'n', 'ne', 'w', 'e', 'sw', 's', 'se'], 'relief' : ['flat', 'raised', 'sunken', 'groove', 'ridge'], 'fill' : ['x', 'y', 'both'], } if var not in arrays[array]: return [False, 'Niepoprawne dane - klucz: %s' % record] return [True, var] def __checkF(self, record, var): try: check = int(var.split(';')[1]) except: return [False, 'Niepoprawne dane - klucz: %s' % record] else: var = (var.split(';')[0], int(var.split(';')[1])) return [True, var] def R(self, record): self.__checkIfFileExist() content = {} for x in CD.open((str(appdata) + '\Generator CSV\style.cfg'), 'r', 'utf-8').read().split('\n'): x = x.split(' = ') try: name = x[0].split('(')[0] var = x[1] type = x[0].split('(')[1].strip(')') content[name] = [var.strip('\r'), type] except: continue checkingOutput = self.__checkIfRecordExist(content, record) if not checkingOutput[0]: MSG('E0005', True, checkingOutput[1]) var = content[record] if var[1] == 'I': # Integer checkingOutput = self.__checkI(record, var[0]) if checkingOutput[0]: return checkingOutput[1] else: MSG('E0005', True, checkingOutput[1]) elif var[1] == 'B': # Boolean checkingOutput = self.__checkB(record, var[0]) if checkingOutput[0]: return checkingOutput[1] else: MSG('E0005', True, checkingOutput[1]) elif var[1] == 'C': # Color checkingOutput = self.__checkC(record, var[0]) if checkingOutput[0]: return checkingOutput[1] else: MSG('E0005', True, checkingOutput[1]) elif var[1] == 'P': # Path checkingOutput = self.__checkP(record, var[0]) if checkingOutput[0]: return checkingOutput[1] else: MSG('E0005', True, checkingOutput[1]) elif (var[1])[:2] == 'FA': # From Array checkingOutput = self.__checkFA(record, var[0], (var[1])[2:]) if checkingOutput[0]: return checkingOutput[1] else: MSG('E0005', True, checkingOutput[1]) elif var[1] == 'F': # Font checkingOutput = self.__checkF(record, var[0]) if checkingOutput[0]: return checkingOutput[1] else: MSG('E0005', True, checkingOutput[1]) else: MSG('E0005', True, 'Nie można rozpoznać typu klucza %s' % record) GUI = GUI() # ------------------------------- # Zarządzanie plikami formatu # ------------------------------- # class FMT: def __checkFolderInstance(self): if 'Generator CSV' not in [x for x in OS.listdir(appdata)]: OS.mkdir(str(appdata) + '/Generator CSV') else: if 'format-presets' not in [x for x in OS.listdir(str(appdata) + '\Generator CSV')]: OS.mkdir(str(appdata) + '/Generator CSV/format-presets') def __checkContent(self, write, content): if write: class functions: def bool(self, var): if var in list(content.keys()): if content[var] != True and content[var] != False: return [False, 'Niepoprawne dane - klucz: %s' % var] else: if content[var] == False: content[var] = '0' return [True] else: content[var] = '1' return [True] else: return [False, 'Brak danych - klucz: %s' % var] def separator_string(self, var): if var in list(content.keys()): allowedCharactersInSeparator = CFG.R()['allowedCharactersInSeparator'] check = content[var] check = check.strip('') for x in check: if x not in allowedCharactersInSeparator: return [False, 'Niepoprawne dane - klucz: %s' % var] return [True] else: return [False, 'Brak danych - klucz: %s' % var] def separator_array(self, var): if var in list(content.keys()): allowedCharactersInSeparator = CFG.R()['allowedCharactersInSeparator'] check = content[var] for x in check: x = x.strip('') for y in x: if y not in allowedCharactersInSeparator: return [False, 'Niepoprawne dane - klucz: %s' % var] content[var] = str(content[var]) return [True] else: return [False, 'Brak danych - klucz: %s' % var] def integer(self, var): if var in list(content.keys()): content[var] = str(content[var]) return [True] else: return [False, 'Brak danych - klucz: %s' % var] functions = functions() check = functions.bool('student') if not check[0]: return check check = functions.separator_string('personSeparator') if not check[0]: return check check = functions.separator_string('rowSeparator') if not check[0]: return check check = functions.separator_array('dataSeparators') if not check[0]: return check check = functions.integer('loginRow') if not check[0]: return check check = functions.integer('loginPositionInRow') if not check[0]: return check check = functions.integer('fnameRow') if not check[0]: return check check = functions.integer('fnamePositionInRow') if not check[0]: return check check = functions.integer('lnameRow') if not check[0]: return check check = functions.integer('lnamePositionInRow') if not check[0]: return check check = functions.integer('schoolRow') if not check[0]: return check check = functions.integer('schoolPositionInRow') if not check[0]: return check check = functions.integer('classRow') if not check[0]: return check check = functions.integer('classPositionInRow') if not check[0]: return check return [True, content] else: class functions: def bool(self, var): if var in list(content.keys()): if content[var] != '0' and content[var] != '1': return [False, 'Niepoprawne dane - klucz: %s' % var] else: if content[var] == '0': content[var] = False return [True] else: content[var] = True return [True] else: return [False, 'Brak danych - klucz: %s' % var] def separator_string(self, var): if var in list(content.keys()): allowedCharactersInSeparator = CFG.R('allowedCharactersInSeparator') check = content[var] check = check.strip('') for x in check: if x not in allowedCharactersInSeparator: return [False, 'Niepoprawne dane - klucz: %s' % var] return [True] else: return [False, 'Brak danych - klucz: %s' % var] def separator_array(self, var): if var in list(content.keys()): allowedCharactersInSeparator = CFG.R('allowedCharactersInSeparator') new_contentVar = (content[var])[2:-2].split("', '") check = new_contentVar for x in check: x = x.strip('') for y in x: if y not in allowedCharactersInSeparator: return [False, 'Niepoprawne dane - klucz: %s' % var] content[var] = new_contentVar return [True] else: return [False, 'Brak danych - klucz: %s' % var] def integer(self, var): if var in list(content.keys()): try: check = int(content[var]) except: return [False, 'Niepoprawne dane - klucz: %s' % var] else: content[var] = int(content[var]) return [True] else: return [False, 'Brak danych - klucz: %s' % var] functions = functions() check = functions.bool('student') if not check[0]: return check check = functions.separator_string('personSeparator') if not check[0]: return check check = functions.separator_string('rowSeparator') if not check[0]: return check check = functions.separator_array('dataSeparators') if not check[0]: return check check = functions.integer('loginRow') if not check[0]: return check check = functions.integer('loginPositionInRow') if not check[0]: return check check = functions.integer('fnameRow') if not check[0]: return check check = functions.integer('fnamePositionInRow') if not check[0]: return check check = functions.integer('lnameRow') if not check[0]: return check check = functions.integer('lnamePositionInRow') if not check[0]: return check check = functions.integer('schoolRow') if not check[0]: return check check = functions.integer('schoolPositionInRow') if not check[0]: return check check = functions.integer('classRow') if not check[0]: return check check = functions.integer('classPositionInRow') if not check[0]: return check return [True, content] def getList(self): self.__checkFolderInstance() filesList = OS.listdir(str(appdata) + '/Generator CSV/format-presets') formatPresetsList = [] for x in filesList: if x[-4:] == '.fmt': formatPresetsList.append(x[:-4]) else: continue return formatPresetsList def R(self, preset): if preset in self.getList(): path = str(appdata) + '/Generator CSV/format-presets/%s.fmt' % preset file = CD.open(path, 'r', 'utf-8').read().split('\n') content = {} for x in file: x = x.split(' = ') try: content[x[0]] = (x[1]).strip('\r') except: continue contentCheckingOutput = self.__checkContent(False, content) if contentCheckingOutput[0]: content = contentCheckingOutput[1] else: MSG('E0006', False, contentCheckingOutput[1]) else: content = { "student" : True, "personSeparator" : '', "rowSeparator" : '', "dataSeparators" : [], "loginRow" : 0, "loginPositionInRow" : 0, "fnameRow" : 0, "fnamePositionInRow" : 0, "lnameRow" : 0, "lnamePositionInRow" : 0, "schoolRow" : 0, "schoolPositionInRow" : 0, "classRow" : 0, "classPositionInRow" : 0, } return content def W(self, preset, content): contentCheckingOutput = self.__checkContent(True, content) if contentCheckingOutput[0]: contentToSave = contentCheckingOutput[1] with CD.open(str(appdata) + '/Generator CSV/format-presets/%s.fmt' % preset, 'w', 'utf-8') as file: for x in contentToSave: file.write(x + ' = ' + content[x] + '\n') return True else: MSG('E0006', False, contentCheckingOutput[1]) return False FMT = FMT() # ---------------------------------- # Przetwarzanie plików # ----------------------------------- # class dataProcess: # Funkcje sprawdzające def __checkIfAtLeastOneInputFileIsFilled(files): filledFiles = [] index = 0 for x in files: if not (x[0] == '' or x[1] == ''): filledFiles.append(index) index += 1 if len(filledFiles) != 0: return (True, filledFiles) else: return (False) def __checkIfInputFilesIsReadable(self, files, filledFiles): for x in filledFiles: try: check = CD.open((files[x])[0], 'r', CFG.R('inputCoding')) except: return False return True def __checkIfInputFilesFormatPresetsExist(self, files, filledFiles): for x in filledFiles: if (files[x])[1] not in FMT.getList(): return False return True def __checkIfCreateOutputFilesIsPossible(self, files): for x in files: try: check = CD.open(x, 'w', CFG.R('outputCoding')) except: return False return true # def start(self, files): checkingOutput = [] testOutput = self.__checkIfAtLeastOneInputFileIsFilled(files[:-1]) checkingOutput.append(testOutput[0]) if not testOutput[0]: return checkingOutput filledFiles = testOutput[1] testOutput = self.__checkIfInputFilesIsReadable(files[:-1], filledFiles) checkingOutput.append(testOutput) if not testOutput: return checkingOutput testOutput = self.__checkIfInputFilesFormatPresetsExist(files[:-1], filledFiles) checkingOutput.append(testOutput) if not testOutput: return checkingOutput testOutput = self.__checkIfInputFilesFormatPresetsExist(files[-1]) checkingOutput.append(testOutput) if not testOutput: return checkingOutput input = [] for x in filledFiles: input.append(files[x]) output = files[-1] testOutput = self.__checkIfCreateOutputFilesIsPossible(files[-1]) checkingOutput.append(testOutput) if not testOutput: return checkingOutput dataProcess = dataProcess() # ------------------------------------------- # GUI # ------------------------------------------- # class mainWindow: def __init__(self, master): # Okno self.master = master master.title('%s %s' % (VAR.programName, VAR.programVersion)) master.geometry('%ix%i' % (GUI.R('windowWidth'), GUI.R('windowHeight'))) master.resizable(width = GUI.R('windowWidthResizable'), height = GUI.R('windowHeightResizable')) master.configure(bg = GUI.R('windowMainBG')) master.iconbitmap(GUI.R('mainIcon')) # Theme TKttk.Style().theme_create("main", parent = "default", settings = { "mainMenu.TNotebook": { "configure": { "background": GUI.R('mainMenuBG'), "tabposition": GUI.R('mainMenuPosition'), "borderwidth": GUI.R('tabFramesBorderWidth'), }, }, "mainMenu.TNotebook.Tab": { "configure": { "background": GUI.R('unselectedTabBG'), "borderwidth": GUI.R('menuTabsBorderWidth'), "padding": GUI.R('menuTabsPadding'), }, "map": { "background": [ ("selected", GUI.R('selectedTabBG')), ("disabled", GUI.R('disabledTabBG')), ] } }, "mainMenuTabFrame.TFrame": { "configure": { "background": GUI.R('tabFrameBG'), }, }, "tabHeader.TLabel": { "configure": { "font": GUI.R('headerFont'), "background": GUI.R('headerBG'), "foreground": GUI.R('headerTextColor'), "padding": GUI.R('headerPadding'), "anchor": GUI.R('headerTextAnchor'), }, }, "contentTabFrame.TFrame": { "configure": { "background": GUI.R('contentTabFrameBG'), }, }, "layoutFrame.TFrame": { "configure": { "background": GUI.R('layoutFrameBG'), }, }, "label1.TLabel": { "configure": { "background": GUI.R('label1BG'), "foreground": GUI.R('label1TextColor'), "font": GUI.R('label1Font'), }, }, "label2.TLabel": { "configure": { "background": GUI.R('label2BG'), "foreground": GUI.R('label2TextColor'), "font" : GUI.R('label2Font') }, }, "combobox1.TCombobox": { "configure": { "arrowcolor": GUI.R('combobox1ArrowColor'), "background": GUI.R('combobox1ButtonColor'), "bordercolor": GUI.R('combobox1BorderColor'), "fieldbackground": GUI.R('combobox1FieldBackground'), "foreground": GUI.R('combobox1TextColor'), "relief": GUI.R('combobox1Relief'), "borderwidth": GUI.R('combobox1BorderWidth'), "padding": GUI.R('combobox1Padding'), }, }, "combobox2.TCombobox": { "configure": { "arrowcolor": GUI.R('combobox2ArrowColor'), "background": GUI.R('combobox2ButtonColor'), "bordercolor": GUI.R('combobox2BorderColor'), "fieldbackground": GUI.R('combobox2FieldBackground'), "foreground": GUI.R('combobox2TextColor'), "relief": GUI.R('combobox2Relief'), "borderwidth": GUI.R('combobox2BorderWidth'), "padding": GUI.R('combobox2Padding'), }, }, "button1.TButton": { "configure": { "anchor": GUI.R('button1TextAnchor'), "background": GUI.R('button1Background'), "foreground": GUI.R('button1Foreground'), "padding": GUI.R('button1Padding'), }, }, "separator1.TSeparator": { "configure": { "background": GUI.R('separator1BG'), }, }, "spinbox1.TSpinbox": { "configure": { "arrowcolor": GUI.R('spinbox1ArrowColor'), "fieldbackground": GUI.R('spinbox1FieldBackground'), "relief": GUI.R('spinbox1Relief'), "borderwidth": GUI.R('spinbox1BorderWidth'), "foreground": GUI.R('spinbox1TextColor'), "background": GUI.R('spinbox1ButtonColor'), "padding" : GUI.R('spinbox1Padding'), }, }, "entry1.TEntry": { "configure": { "fieldbackground": GUI.R('entry1FieldBackground'), "relief": GUI.R('entry1Relief'), "borderwidth": GUI.R('entry1BorderWidth'), "padding": GUI.R('entry1Padding'), "foreground": GUI.R('entry1TextColor'), }, }, }) TKttk.Style().theme_use("main") # Menu główne self.mainMenu = TKttk.Notebook(master, width = master.winfo_width() - (2 * GUI.R('menuTabsPadding') + GUI.R('tabIconsSize')), height = master.winfo_height()) self.mainMenu.config(style = "mainMenu.TNotebook") self.mainMenu.grid(row = 0) # Ikona self.iconTab = TKttk.Frame(self.mainMenu) self.iconTabImg = PLimg.open(GUI.R('iconTabIcon')) self.iconTabImg = self.iconTabImg.resize((GUI.R('tabIconsSize'), GUI.R('tabIconsSize')), PLimg.ANTIALIAS) self.iconTabImg = PLitk.PhotoImage(self.iconTabImg) self.mainMenu.add(self.iconTab, image = self.iconTabImg, state = TK.DISABLED) # TAB1 - Generator #################################################### self.generateTab = TKttk.Frame(self.mainMenu) self.generateTab.config(style = "mainMenuTabFrame.TFrame") self.generateTabImg = PLimg.open(GUI.R('generateTabIcon')) self.generateTabImg = self.generateTabImg.resize((GUI.R('tabIconsSize'), GUI.R('tabIconsSize')), PLimg.ANTIALIAS) self.generateTabImg = PLitk.PhotoImage(self.generateTabImg) self.mainMenu.add(self.generateTab, image = self.generateTabImg, state = TK.NORMAL) # Nagłówek self.generateHeader = TKttk.Label(self.generateTab) self.generateHeader.config(style = 'tabHeader.TLabel') self.generateHeader.config(text = 'GENERATOR CSV') self.generateHeader.pack(fill = GUI.R('headerFill')) # Zawartość self.generateFrame = TKttk.Frame(self.generateTab) self.generateFrame.config(style = 'contentTabFrame.TFrame') self.generateFrame.pack(fill = GUI.R('contentTabFrameFill'), expand = GUI.R('contentTabFrameExpand'), padx = GUI.R('tabFramePadding'), pady = GUI.R('tabFramePadding')) # (1) Pliki ################################################# self.generateFilesFrame = TKttk.Frame(self.generateFrame) self.generateFilesFrame.config(style = 'layoutFrame.TFrame') self.generateFilesFrame.pack(fill = TK.BOTH, expand = 1) # (2) Pliki wejściowe ############################# self.generateInputFilesFrame = TKttk.Frame(self.generateFilesFrame) self.generateInputFilesFrame.config(style = 'layoutFrame.TFrame') self.generateInputFilesFrame.pack(fill = TK.BOTH, expand = 1, padx = GUI.R('outsidelayoutFramesPadX')) # (3) Plik źródłowy 1 ################### self.GIF1Frame = TKttk.Frame(self.generateInputFilesFrame) self.GIF1Frame.config(style = 'layoutFrame.TFrame') self.GIF1Frame.pack(fill = TK.X, expand = 1, pady = int((GUI.R('GIFFrameSeparators')/2))) # "Plik źródłowy (1)" self.GIF1Label = TKttk.Label(self.GIF1Frame) self.GIF1Label.config(style = 'label1.TLabel') self.GIF1Label.config(width = GUI.R('generateFilesLabelWidth')) self.GIF1Label.config(anchor = GUI.R('generateFilesLabelAnchor')) self.GIF1Label.config(padding = ('0 0 %s 0' % str(2 * GUI.R('generateInputFilesPadding')))) self.GIF1Label.config(text = 'Plik źródłowy (1)') self.GIF1Label.pack(side = TK.LEFT) # Plik żródłowy (1) - Ustawienia self.GIF1SFrame = TKttk.Frame(self.GIF1Frame) self.GIF1SFrame.config(style = 'layoutFrame.TFrame') self.GIF1SFrame.pack(side = TK.RIGHT, fill = TK.X, expand = 1) # Lokalizacja self.GIF1SLocalizationFrame = TKttk.Frame(self.GIF1SFrame) self.GIF1SLocalizationFrame.config(style = 'layoutFrame.TFrame') self.GIF1SLocalizationFrame.pack(side = TK.TOP, fill = TK.X, expand = 1, pady = GUI.R('generateInputFilesPadding')) # Lokalizacja - Entry self.GIF1SLocalizationEntryVar = TK.StringVar() self.GIF1SLocalizationEntry = TKttk.Entry(self.GIF1SLocalizationFrame) self.GIF1SLocalizationEntry.config(style = 'entry1.TEntry') self.GIF1SLocalizationEntry.config(textvariable = self.GIF1SLocalizationEntryVar) self.GIF1SLocalizationEntry.pack(side = TK.LEFT, expand = 1, fill = TK.X, padx = GUI.R('generateInputFilesPadding')) # Lokalizacja - Button self.GIF1SLocalizationButton = TKttk.Button(self.GIF1SLocalizationFrame) self.GIF1SLocalizationButton.config(style = 'button1.TButton') self.GIF1SLocalizationButton.config(text = 'Przeglądaj') self.GIF1SLocalizationButton.config(command = self.GIF1SLocalizationButtonAction) self.GIF1SLocalizationButton.pack(side = TK.RIGHT, padx = GUI.R('generateInputFilesPadding')) # Format self.GIF1SFormatFrame = TKttk.Frame(self.GIF1SFrame) self.GIF1SFormatFrame.config(style = 'layoutFrame.TFrame') self.GIF1SFormatFrame.pack(side = TK.BOTTOM, fill = TK.X, expand = 1, pady = GUI.R('generateInputFilesPadding')) # Format - Label self.GIF1SFormatLabel = TKttk.Label(self.GIF1SFormatFrame) self.GIF1SFormatLabel.config(style = 'label2.TLabel') self.GIF1SFormatLabel.config(text = 'Format') self.GIF1SFormatLabel.pack(side = TK.LEFT, padx = GUI.R('generateInputFilesPadding')) # Format - Combobox self.GIF1SFormatComboboxVar = TK.StringVar() self.GIF1SFormatCombobox = TKttk.Combobox(self.GIF1SFormatFrame) self.GIF1SFormatCombobox.config(style = 'combobox1.TCombobox') self.GIF1SFormatCombobox.option_add("*TCombobox*Listbox.background", GUI.R('combobox1ListBoxBackground')) self.GIF1SFormatCombobox.option_add("*TCombobox*Listbox.foreground", GUI.R('combobox1ListBoxForeground')) self.GIF1SFormatCombobox.option_add("*TCombobox*Listbox.selectBackground", GUI.R('combobox1ListBoxSelectBackground')) self.GIF1SFormatCombobox.option_add("*TCombobox*Listbox.selectForeground", GUI.R('combobox1ListBoxSelectForeground')) self.GIF1SFormatCombobox.config(state = 'readonly') self.GIF1SFormatCombobox.config(textvariable = self.GIF1SFormatComboboxVar) self.GIF1SFormatCombobox['values'] = tuple(FMT.getList()) self.GIF1SFormatCombobox.pack(side = TK.LEFT, expand = 1, fill = TK.X, padx = GUI.R('generateInputFilesPadding')) ######################################### # (3) Plik źródłowy 2 ################### self.GIF2Frame = TKttk.Frame(self.generateInputFilesFrame) self.GIF2Frame.config(style = 'layoutFrame.TFrame') self.GIF2Frame.pack(fill = TK.X, expand = 1, pady = int((GUI.R('GIFFrameSeparators')/2))) # "Plik źródłowy (1)" self.GIF2Label = TKttk.Label(self.GIF2Frame) self.GIF2Label.config(style = 'label1.TLabel') self.GIF2Label.config(width = GUI.R('generateFilesLabelWidth')) self.GIF2Label.config(anchor = GUI.R('generateFilesLabelAnchor')) self.GIF2Label.config(padding = ('0 0 %s 0' % str(2 * GUI.R('generateInputFilesPadding')))) self.GIF2Label.config(text = 'Plik źródłowy (1)') self.GIF2Label.pack(side = TK.LEFT) # Plik żródłowy (1) - Ustawienia self.GIF2SFrame = TKttk.Frame(self.GIF2Frame) self.GIF2SFrame.config(style = 'layoutFrame.TFrame') self.GIF2SFrame.pack(side = TK.RIGHT, fill = TK.X, expand = 1) # Lokalizacja self.GIF2SLocalizationFrame = TKttk.Frame(self.GIF2SFrame) self.GIF2SLocalizationFrame.config(style = 'layoutFrame.TFrame') self.GIF2SLocalizationFrame.pack(side = TK.TOP, fill = TK.X, expand = 1, pady = GUI.R('generateInputFilesPadding')) # Lokalizacja - Entry self.GIF2SLocalizationEntryVar = TK.StringVar() self.GIF2SLocalizationEntry = TKttk.Entry(self.GIF2SLocalizationFrame) self.GIF2SLocalizationEntry.config(style = 'entry1.TEntry') self.GIF2SLocalizationEntry.config(textvariable = self.GIF2SLocalizationEntryVar) self.GIF2SLocalizationEntry.pack(side = TK.LEFT, expand = 1, fill = TK.X, padx = GUI.R('generateInputFilesPadding')) # Lokalizacja - Button self.GIF2SLocalizationButton = TKttk.Button(self.GIF2SLocalizationFrame) self.GIF2SLocalizationButton.config(style = 'button1.TButton') self.GIF2SLocalizationButton.config(text = 'Przeglądaj') self.GIF2SLocalizationButton.config(command = self.GIF2SLocalizationButtonAction) self.GIF2SLocalizationButton.pack(side = TK.RIGHT, padx = GUI.R('generateInputFilesPadding')) # Format self.GIF2SFormatFrame = TKttk.Frame(self.GIF2SFrame) self.GIF2SFormatFrame.config(style = 'layoutFrame.TFrame') self.GIF2SFormatFrame.pack(side = TK.BOTTOM, fill = TK.X, expand = 1, pady = GUI.R('generateInputFilesPadding')) # Format - Label self.GIF2SFormatLabel = TKttk.Label(self.GIF2SFormatFrame) self.GIF2SFormatLabel.config(style = 'label2.TLabel') self.GIF2SFormatLabel.config(text = 'Format') self.GIF2SFormatLabel.pack(side = TK.LEFT, padx = GUI.R('generateInputFilesPadding')) # Format - Combobox self.GIF2SFormatComboboxVar = TK.StringVar() self.GIF2SFormatCombobox = TKttk.Combobox(self.GIF2SFormatFrame) self.GIF2SFormatCombobox.config(style = 'combobox1.TCombobox') self.GIF2SFormatCombobox.option_add("*TCombobox*Listbox.background", GUI.R('combobox1ListBoxBackground')) self.GIF2SFormatCombobox.option_add("*TCombobox*Listbox.foreground", GUI.R('combobox1ListBoxForeground')) self.GIF2SFormatCombobox.option_add("*TCombobox*Listbox.selectBackground", GUI.R('combobox1ListBoxSelectBackground')) self.GIF2SFormatCombobox.option_add("*TCombobox*Listbox.selectForeground", GUI.R('combobox1ListBoxSelectForeground')) self.GIF2SFormatCombobox.config(state = 'readonly') self.GIF2SFormatCombobox.config(textvariable = self.GIF2SFormatComboboxVar) self.GIF2SFormatCombobox['values'] = tuple(FMT.getList()) self.GIF2SFormatCombobox.pack(side = TK.LEFT, expand = 1, fill = TK.X, padx = GUI.R('generateInputFilesPadding')) ######################################### # (3) Plik źródłowy 3 ################### self.GIF3Frame = TKttk.Frame(self.generateInputFilesFrame) self.GIF3Frame.config(style = 'layoutFrame.TFrame') self.GIF3Frame.pack(fill = TK.X, expand = 1, pady = int((GUI.R('GIFFrameSeparators')/2))) # "Plik źródłowy (1)" self.GIF3Label = TKttk.Label(self.GIF3Frame) self.GIF3Label.config(style = 'label1.TLabel') self.GIF3Label.config(width = GUI.R('generateFilesLabelWidth')) self.GIF3Label.config(anchor = GUI.R('generateFilesLabelAnchor')) self.GIF3Label.config(padding = ('0 0 %s 0' % str(2 * GUI.R('generateInputFilesPadding')))) self.GIF3Label.config(text = 'Plik źródłowy (1)') self.GIF3Label.pack(side = TK.LEFT) # Plik żródłowy (1) - Ustawienia self.GIF3SFrame = TKttk.Frame(self.GIF3Frame) self.GIF3SFrame.config(style = 'layoutFrame.TFrame') self.GIF3SFrame.pack(side = TK.RIGHT, fill = TK.X, expand = 1) # Lokalizacja self.GIF3SLocalizationFrame = TKttk.Frame(self.GIF3SFrame) self.GIF3SLocalizationFrame.config(style = 'layoutFrame.TFrame') self.GIF3SLocalizationFrame.pack(side = TK.TOP, fill = TK.X, expand = 1, pady = GUI.R('generateInputFilesPadding')) # Lokalizacja - Entry self.GIF3SLocalizationEntryVar = TK.StringVar() self.GIF3SLocalizationEntry = TKttk.Entry(self.GIF3SLocalizationFrame) self.GIF3SLocalizationEntry.config(style = 'entry1.TEntry') self.GIF3SLocalizationEntry.config(textvariable = self.GIF3SLocalizationEntryVar) self.GIF3SLocalizationEntry.pack(side = TK.LEFT, expand = 1, fill = TK.X, padx = GUI.R('generateInputFilesPadding')) # Lokalizacja - Button self.GIF3SLocalizationButton = TKttk.Button(self.GIF3SLocalizationFrame) self.GIF3SLocalizationButton.config(style = 'button1.TButton') self.GIF3SLocalizationButton.config(text = 'Przeglądaj') self.GIF3SLocalizationButton.config(command = self.GIF3SLocalizationButtonAction) self.GIF3SLocalizationButton.pack(side = TK.RIGHT, padx = GUI.R('generateInputFilesPadding')) # Format self.GIF3SFormatFrame = TKttk.Frame(self.GIF3SFrame) self.GIF3SFormatFrame.config(style = 'layoutFrame.TFrame') self.GIF3SFormatFrame.pack(side = TK.BOTTOM, fill = TK.X, expand = 1, pady = GUI.R('generateInputFilesPadding')) # Format - Label self.GIF3SFormatLabel = TKttk.Label(self.GIF3SFormatFrame) self.GIF3SFormatLabel.config(style = 'label2.TLabel') self.GIF3SFormatLabel.config(text = 'Format') self.GIF3SFormatLabel.pack(side = TK.LEFT, padx = GUI.R('generateInputFilesPadding')) # Format - Combobox self.GIF3SFormatComboboxVar = TK.StringVar() self.GIF3SFormatCombobox = TKttk.Combobox(self.GIF3SFormatFrame) self.GIF3SFormatCombobox.config(style = 'combobox1.TCombobox') self.GIF3SFormatCombobox.option_add("*TCombobox*Listbox.background", GUI.R('combobox1ListBoxBackground')) self.GIF3SFormatCombobox.option_add("*TCombobox*Listbox.foreground", GUI.R('combobox1ListBoxForeground')) self.GIF3SFormatCombobox.option_add("*TCombobox*Listbox.selectBackground", GUI.R('combobox1ListBoxSelectBackground')) self.GIF3SFormatCombobox.option_add("*TCombobox*Listbox.selectForeground", GUI.R('combobox1ListBoxSelectForeground')) self.GIF3SFormatCombobox.config(state = 'readonly') self.GIF3SFormatCombobox.config(textvariable = self.GIF3SFormatComboboxVar) self.GIF3SFormatCombobox['values'] = tuple(FMT.getList()) self.GIF3SFormatCombobox.pack(side = TK.LEFT, expand = 1, fill = TK.X, padx = GUI.R('generateInputFilesPadding')) ######################################### # (3) Plik źródłowy 4 ################### self.GIF4Frame = TKttk.Frame(self.generateInputFilesFrame) self.GIF4Frame.config(style = 'layoutFrame.TFrame') self.GIF4Frame.pack(fill = TK.X, expand = 1, pady = int((GUI.R('GIFFrameSeparators')/2))) # "Plik źródłowy (1)" self.GIF4Label = TKttk.Label(self.GIF4Frame) self.GIF4Label.config(style = 'label1.TLabel') self.GIF4Label.config(width = GUI.R('generateFilesLabelWidth')) self.GIF4Label.config(anchor = GUI.R('generateFilesLabelAnchor')) self.GIF4Label.config(padding = ('0 0 %s 0' % str(2 * GUI.R('generateInputFilesPadding')))) self.GIF4Label.config(text = 'Plik źródłowy (1)') self.GIF4Label.pack(side = TK.LEFT) # Plik żródłowy (1) - Ustawienia self.GIF4SFrame = TKttk.Frame(self.GIF4Frame) self.GIF4SFrame.config(style = 'layoutFrame.TFrame') self.GIF4SFrame.pack(side = TK.RIGHT, fill = TK.X, expand = 1) # Lokalizacja self.GIF4SLocalizationFrame = TKttk.Frame(self.GIF4SFrame) self.GIF4SLocalizationFrame.config(style = 'layoutFrame.TFrame') self.GIF4SLocalizationFrame.pack(side = TK.TOP, fill = TK.X, expand = 1, pady = GUI.R('generateInputFilesPadding')) # Lokalizacja - Entry self.GIF4SLocalizationEntryVar = TK.StringVar() self.GIF4SLocalizationEntry = TKttk.Entry(self.GIF4SLocalizationFrame) self.GIF4SLocalizationEntry.config(style = 'entry1.TEntry') self.GIF4SLocalizationEntry.config(textvariable = self.GIF4SLocalizationEntryVar) self.GIF4SLocalizationEntry.pack(side = TK.LEFT, expand = 1, fill = TK.X, padx = GUI.R('generateInputFilesPadding')) # Lokalizacja - Button self.GIF4SLocalizationButton = TKttk.Button(self.GIF4SLocalizationFrame) self.GIF4SLocalizationButton.config(style = 'button1.TButton') self.GIF4SLocalizationButton.config(text = 'Przeglądaj') self.GIF4SLocalizationButton.config(command = self.GIF4SLocalizationButtonAction) self.GIF4SLocalizationButton.pack(side = TK.RIGHT, padx = GUI.R('generateInputFilesPadding')) # Format self.GIF4SFormatFrame = TKttk.Frame(self.GIF4SFrame) self.GIF4SFormatFrame.config(style = 'layoutFrame.TFrame') self.GIF4SFormatFrame.pack(side = TK.BOTTOM, fill = TK.X, expand = 1, pady = GUI.R('generateInputFilesPadding')) # Format - Label self.GIF4SFormatLabel = TKttk.Label(self.GIF4SFormatFrame) self.GIF4SFormatLabel.config(style = 'label2.TLabel') self.GIF4SFormatLabel.config(text = 'Format') self.GIF4SFormatLabel.pack(side = TK.LEFT, padx = GUI.R('generateInputFilesPadding')) # Format - Combobox self.GIF4SFormatComboboxVar = TK.StringVar() self.GIF4SFormatCombobox = TKttk.Combobox(self.GIF4SFormatFrame) self.GIF4SFormatCombobox.config(style = 'combobox1.TCombobox') self.GIF4SFormatCombobox.option_add("*TCombobox*Listbox.background", GUI.R('combobox1ListBoxBackground')) self.GIF4SFormatCombobox.option_add("*TCombobox*Listbox.foreground", GUI.R('combobox1ListBoxForeground')) self.GIF4SFormatCombobox.option_add("*TCombobox*Listbox.selectBackground", GUI.R('combobox1ListBoxSelectBackground')) self.GIF4SFormatCombobox.option_add("*TCombobox*Listbox.selectForeground", GUI.R('combobox1ListBoxSelectForeground')) self.GIF4SFormatCombobox.config(state = 'readonly') self.GIF4SFormatCombobox.config(textvariable = self.GIF4SFormatComboboxVar) self.GIF4SFormatCombobox['values'] = tuple(FMT.getList()) self.GIF4SFormatCombobox.pack(side = TK.LEFT, expand = 1, fill = TK.X, padx = GUI.R('generateInputFilesPadding')) ######################################### ################################################### # (2) Separator1 ################################## self.generateSeparator1 = TKttk.Separator(self.generateFilesFrame) self.generateSeparator1.config(style = 'separator1.TSeparator') self.generateSeparator1.config(orient = TK.HORIZONTAL) self.generateSeparator1.pack(fill = TK.X, pady = GUI.R('generateHorizontalSeparatorPadY')) ################################################### # (2) Pliki wyjściowe ############################# self.generateOutputFilesFrame = TKttk.Frame(self.generateFilesFrame) self.generateOutputFilesFrame.config(style = 'layoutFrame.TFrame') self.generateOutputFilesFrame.pack(fill = TK.X, padx = GUI.R('outsidelayoutFramesPadX')) # (3) Poczta ############################ self.GOFMailFrame = TKttk.Frame(self.generateOutputFilesFrame) self.GOFMailFrame.config(style = 'layoutFrame.TFrame') self.GOFMailFrame.pack(pady = GUI.R('generateOutputFilesPadding'), fill = TK.X, expand = 1) # "Poczta" self.GOFMailLabel = TKttk.Label(self.GOFMailFrame) self.GOFMailLabel.config(style = 'label1.TLabel') self.GOFMailLabel.config(width = GUI.R('generateFilesLabelWidth')) self.GOFMailLabel.config(anchor = GUI.R('generateFilesLabelAnchor')) self.GOFMailLabel.config(text = 'Poczta') self.GOFMailLabel.pack(side = TK.LEFT) # Plik poczty - Lokalizacja (Entry) self.GOFMailEntryVar = TK.StringVar() self.GOFMailEntry = TKttk.Entry(self.GOFMailFrame) self.GOFMailEntry.config(style = 'entry1.TEntry') self.GOFMailEntry.config(textvariable = self.GOFMailEntryVar) self.GOFMailEntry.pack(padx = 2 * GUI.R('generateOutputFilesPadding'), side = TK.LEFT, fill = TK.X, expand = 1) # Plik poczty - Lokalizacja (Button) self.GOFMailButton = TKttk.Button(self.GOFMailFrame) self.GOFMailButton.config(style = 'button1.TButton') self.GOFMailButton.config(text = 'Przeglądaj') self.GOFMailButton.config(command = self.GOFMailButtonAction) self.GOFMailButton.pack(side = TK.LEFT) ######################################### # (3) Office ############################ self.GOFOfficeFrame = TKttk.Frame(self.generateOutputFilesFrame) self.GOFOfficeFrame.config(style = 'layoutFrame.TFrame') self.GOFOfficeFrame.pack(pady = GUI.R('generateOutputFilesPadding'), fill = TK.X, expand = 1) # "Office" self.GOFOfficeLabel = TKttk.Label(self.GOFOfficeFrame) self.GOFOfficeLabel.config(style = 'label1.TLabel') self.GOFOfficeLabel.config(width = GUI.R('generateFilesLabelWidth')) self.GOFOfficeLabel.config(anchor = GUI.R('generateFilesLabelAnchor')) self.GOFOfficeLabel.config(text = 'Office') self.GOFOfficeLabel.pack(side = TK.LEFT) # Plik office - Lokalizacja (Entry) self.GOFOfficeEntryVar = TK.StringVar() self.GOFOfficeEntry = TKttk.Entry(self.GOFOfficeFrame) self.GOFOfficeEntry.config(style = 'entry1.TEntry') self.GOFOfficeEntry.config(textvariable = self.GOFOfficeEntryVar) self.GOFOfficeEntry.pack(padx = 2 * GUI.R('generateOutputFilesPadding'), side = TK.LEFT, fill = TK.X, expand = 1) # Plik office - Lokalizacja (Button) self.GOFOfficeButton = TKttk.Button(self.GOFOfficeFrame) self.GOFOfficeButton.config(style = 'button1.TButton') self.GOFOfficeButton.config(text = 'Przeglądaj') self.GOFOfficeButton.config(command = self.GOFOfficeButtonAction) self.GOFOfficeButton.pack(side = TK.LEFT) ######################################### ################################################### ############################################################# # (1) Separator2 ########################################### self.generateSeparator2 = TKttk.Separator(self.generateFrame) self.generateSeparator2.config(style = 'separator1.TSeparator') self.generateSeparator2.config(orient = TK.HORIZONTAL) self.generateSeparator2.pack(fill = TK.X, pady = GUI.R('generateHorizontalSeparatorPadY')) ############################################################# # (1) Przyciski ############################################# self.generateButtonsFrame = TKttk.Frame(self.generateFrame) self.generateButtonsFrame.config(style = 'layoutFrame.TFrame') self.generateButtonsFrame.pack(fill = TK.X, padx = GUI.R('outsidelayoutFramesPadX')) # Przycisk "START" self.generateStartButton = TKttk.Button(self.generateButtonsFrame) self.generateStartButton.config(style = 'button1.TButton') self.generateStartButton.config(padding = GUI.R('generateStartButtonPadding')) self.generateStartButton.config(text = 'START') self.generateStartButton.config(command = self.generateStartButtonAction) self.generateStartButton.pack(side = TK.LEFT, fill = TK.X, expand = 1, pady = GUI.R('generateStartButtonPadY')) ############################################################## ####################################################################### # TAB3 - Format ####################################################### self.formatTab = TKttk.Frame(self.mainMenu) self.formatTab.config(style = "mainMenuTabFrame.TFrame") self.formatTabImg = PLimg.open(GUI.R('formatTabIcon')) self.formatTabImg = self.formatTabImg.resize((GUI.R('tabIconsSize'), GUI.R('tabIconsSize')), PLimg.ANTIALIAS) self.formatTabImg = PLitk.PhotoImage(self.formatTabImg) self.mainMenu.add(self.formatTab, image = self.formatTabImg, state = TK.NORMAL) # Nagłówek self.formatHeader = TKttk.Label(self.formatTab) self.formatHeader.config(style = 'tabHeader.TLabel') self.formatHeader.config(text = 'FORMAT DANYCH') self.formatHeader.pack(fill = GUI.R('headerFill')) # Zawartość self.formatFrame = TKttk.Frame(self.formatTab) self.formatFrame.config(style = 'contentTabFrame.TFrame') self.formatFrame.pack(fill = GUI.R('contentTabFrameFill'), expand = GUI.R('contentTabFrameExpand'), padx = GUI.R('tabFramePadding'), pady = GUI.R('tabFramePadding')) # (1) Ładowanie presetu ##################################### self.loadingPresetFrame = TKttk.Frame(self.formatFrame) self.loadingPresetFrame.config(style = 'layoutFrame.TFrame') self.loadingPresetFrame.pack(fill = TK.X, side = TK.TOP, padx = GUI.R('outsidelayoutFramesPadX'))#, pady = 5, padx = 10) # "Wybierz preset do edycji lub wpisz nazwę nowego" self.loadingListLabel = TKttk.Label(self.loadingPresetFrame) self.loadingListLabel.config(style = 'label1.TLabel') self.loadingListLabel.config(text = 'Wybierz preset do edycji lub wpisz nazwę nowego') self.loadingListLabel.pack(side = TK.LEFT) # Rozwijana lista presetów self.loadingListVar = TK.StringVar() self.loadingList = TKttk.Combobox(self.loadingPresetFrame) self.loadingList.config(textvariable = self.loadingListVar) self.loadingList.config(style = 'combobox2.TCombobox') self.loadingList.option_add("*TCombobox*Listbox.background", GUI.R('combobox2ListBoxBackground')) self.loadingList.option_add("*TCombobox*Listbox.foreground", GUI.R('combobox2ListBoxForeground')) self.loadingList.option_add("*TCombobox*Listbox.selectBackground", GUI.R('combobox2ListBoxSelectBackground')) self.loadingList.option_add("*TCombobox*Listbox.selectForeground", GUI.R('combobox2ListBoxSelectForeground')) self.loadingList.pack(side = TK.LEFT, padx = GUI.R('loadingListPadX'), fill = TK.X, expand = 1) self.loadingList['values'] = tuple(FMT.getList()) # Przycisk "WCZYTAJ" self.loadingButton = TKttk.Button(self.loadingPresetFrame) self.loadingButton.config(style = 'button1.TButton') self.loadingButton.config(command = self.loadingButtonAction) self.loadingButton.config(width = GUI.R('loadingButtonWidth')) self.loadingButton.config(text = 'WCZYTAJ') self.loadingButton.pack(side = TK.RIGHT) ############################################################# # (1) Separator 1 ########################################### self.formatSeparator1 = TKttk.Separator(self.formatFrame) self.formatSeparator1.config(style = 'separator1.TSeparator') self.formatSeparator1.config(orient = TK.HORIZONTAL) self.formatSeparator1.pack(fill = TK.X, pady = GUI.R('formatHorizontalSeparatorPadY')) ############################################################# # (1) Edycja presetu ######################################## self.editingPresetFrame = TKttk.Frame(self.formatFrame) self.editingPresetFrame.config(style = 'layoutFrame.TFrame') self.editingPresetFrame.pack(fill = TK.BOTH, expand = 1, padx = GUI.R('outsidelayoutFramesPadX')) # (2) Ustawienia ################################## self.editingPresetSettingsFrame = TKttk.Frame(self.editingPresetFrame) self.editingPresetSettingsFrame.config(style = 'layoutFrame.TFrame') self.editingPresetSettingsFrame.pack(fill = TK.BOTH, expand = 1) # (3) Inne ustawienia ################### self.editingPresetOSFrame = TKttk.Frame(self.editingPresetSettingsFrame) self.editingPresetOSFrame.config(style = 'layoutFrame.TFrame') self.editingPresetOSFrame.pack(fill = TK.BOTH, expand = 1, side = TK.LEFT) # (5) Typ osoby ############### self.EPOSTypeFrame = TKttk.Frame(self.editingPresetOSFrame) self.EPOSTypeFrame.config(style = 'layoutFrame.TFrame') self.EPOSTypeFrame.pack(fill = TK.X, expand = 1, pady = GUI.R('EPOSTypeFramePadY')) # "Typ osoby" self.EPOSTypeLabel = TKttk.Label(self.EPOSTypeFrame) self.EPOSTypeLabel.config(style = 'label1.TLabel') self.EPOSTypeLabel.config(width = GUI.R('EPOSLabelWidth')) self.EPOSTypeLabel.config(anchor = GUI.R('EPOSLabelAnchor')) self.EPOSTypeLabel.config(text = 'Typ osoby') self.EPOSTypeLabel.pack(side = TK.LEFT) # Radiobutton self.EPOSTypeVar = TK.BooleanVar(value = True) self.EPOSTypeStudentRadiobutton = TK.Radiobutton(self.EPOSTypeFrame) self.EPOSTypeStudentRadiobutton.config(background = GUI.R('radiobutton1Background')) self.EPOSTypeStudentRadiobutton.config(foreground = GUI.R('radiobutton1TextColor')) self.EPOSTypeStudentRadiobutton.config(selectcolor = GUI.R('radiobutton1IndicatorBackground')) self.EPOSTypeStudentRadiobutton.config(activebackground = GUI.R('radiobutton1Background')) self.EPOSTypeStudentRadiobutton.config(activeforeground = GUI.R('radiobutton1TextColor')) self.EPOSTypeStudentRadiobutton.config(variable = self.EPOSTypeVar) self.EPOSTypeStudentRadiobutton.config(value = True) self.EPOSTypeStudentRadiobutton.config(state = TK.DISABLED) self.EPOSTypeStudentRadiobutton.config(text = 'Uczniowie') self.EPOSTypeStudentRadiobutton.pack(side = TK.RIGHT, fill = TK.X, expand = 1) self.EPOSTypeTeacherRadiobutton = TK.Radiobutton(self.EPOSTypeFrame) self.EPOSTypeTeacherRadiobutton.config(background = GUI.R('radiobutton1Background')) self.EPOSTypeTeacherRadiobutton.config(foreground = GUI.R('radiobutton1TextColor')) self.EPOSTypeTeacherRadiobutton.config(selectcolor = GUI.R('radiobutton1IndicatorBackground')) self.EPOSTypeTeacherRadiobutton.config(activebackground = GUI.R('radiobutton1Background')) self.EPOSTypeTeacherRadiobutton.config(activeforeground = GUI.R('radiobutton1TextColor')) self.EPOSTypeTeacherRadiobutton.config(variable = self.EPOSTypeVar) self.EPOSTypeTeacherRadiobutton.config(value = False) self.EPOSTypeTeacherRadiobutton.config(state = TK.DISABLED) self.EPOSTypeTeacherRadiobutton.config(text = 'Nauczyciele') self.EPOSTypeTeacherRadiobutton.pack(side = TK.RIGHT, fill = TK.X, expand = 1) ##################### # (5) Separator pomiedzy osobami self.EPOSPersonSeparatorFrame = TKttk.Frame(self.editingPresetOSFrame) self.EPOSPersonSeparatorFrame.config(style = 'layoutFrame.TFrame') self.EPOSPersonSeparatorFrame.pack(fill = TK.X, expand = 1, pady = GUI.R('EPOSPersonSeparatorFramePadY')) # "Separator pomiędzy osobami" self.EPOSPersonSeparatorLabel = TKttk.Label(self.EPOSPersonSeparatorFrame) self.EPOSPersonSeparatorLabel.config(style = 'label1.TLabel') self.EPOSPersonSeparatorLabel.config(width = GUI.R('EPOSLabelWidth')) self.EPOSPersonSeparatorLabel.config(anchor = GUI.R('EPOSLabelAnchor')) self.EPOSPersonSeparatorLabel.config(text = 'Separator pomiędzy osobami') self.EPOSPersonSeparatorLabel.pack(side = TK.LEFT) # Entry - Separator pomiedzy osobami self.EPOSPersonSeparatorVar = TK.StringVar() self.EPOSPersonSeparatorEntry = TKttk.Entry(self.EPOSPersonSeparatorFrame) self.EPOSPersonSeparatorEntry.config(style = 'entry1.TEntry') self.EPOSPersonSeparatorEntry.config(textvariable = self.EPOSPersonSeparatorVar) self.EPOSPersonSeparatorEntry.config(state = TK.DISABLED) self.EPOSPersonSeparatorEntry.pack(side = TK.RIGHT, fill = TK.X, expand = 1) ##################### # (5) Separator pomiedzy wierszami self.EPOSRowSeparatorFrame = TKttk.Frame(self.editingPresetOSFrame) self.EPOSRowSeparatorFrame.config(style = 'layoutFrame.TFrame') self.EPOSRowSeparatorFrame.pack(fill = TK.X, expand = 1, pady = GUI.R('EPOSRowSeparatorFramePadY')) # "Separator pomiędzy wierszami" self.EPOSRowSeparatorLabel = TKttk.Label(self.EPOSRowSeparatorFrame) self.EPOSRowSeparatorLabel.config(style = 'label1.TLabel') self.EPOSRowSeparatorLabel.config(width = GUI.R('EPOSLabelWidth')) self.EPOSRowSeparatorLabel.config(anchor = GUI.R('EPOSLabelAnchor')) self.EPOSRowSeparatorLabel.config(text = 'Separator pomiędzy wierszami') self.EPOSRowSeparatorLabel.pack(side = TK.LEFT) # Entry - Separator pomiedzy wierszami self.EPOSRowSeparatorVar = TK.StringVar() self.EPOSRowSeparatorEntry = TKttk.Entry(self.EPOSRowSeparatorFrame) self.EPOSRowSeparatorEntry.config(style = 'entry1.TEntry') self.EPOSRowSeparatorEntry.config(textvariable = self.EPOSRowSeparatorVar) self.EPOSRowSeparatorEntry.config(state = TK.DISABLED) self.EPOSRowSeparatorEntry.pack(side = TK.RIGHT, fill = TK.X, expand = 1) ##################### # (5) Separatory pomiedzy danymi self.EPOSDataSeparatorFrame = TKttk.Frame(self.editingPresetOSFrame) self.EPOSDataSeparatorFrame.config(style = 'layoutFrame.TFrame') self.EPOSDataSeparatorFrame.pack(fill = TK.BOTH, expand = 1, pady = GUI.R('EPOSDataSeparatorFramePadY')) # "Separatory pomiędzy danymi" self.EPOSDataSeparatorLabel = TKttk.Label(self.EPOSDataSeparatorFrame) self.EPOSDataSeparatorLabel.config(style = 'label1.TLabel') self.EPOSDataSeparatorLabel.config(width = GUI.R('EPOSLabelWidth')) self.EPOSDataSeparatorLabel.config(anchor = GUI.R('EPOSLabelAnchor')) self.EPOSDataSeparatorLabel.config(text = 'Separatory pomiędzy danymi') self.EPOSDataSeparatorLabel.pack(side = TK.LEFT) # Entry - Separator pomiedzy wierszami self.EPOSDataSeparatorText = TK.Text(self.EPOSDataSeparatorFrame) self.EPOSDataSeparatorText.config(state = TK.DISABLED) self.EPOSDataSeparatorText.config(background = GUI.R('text1Background')) self.EPOSDataSeparatorText.config(foreground = GUI.R('text1TextColor')) self.EPOSDataSeparatorText.config(relief = GUI.R('text1Relief')) self.EPOSDataSeparatorText.pack(side = TK.TOP, fill = TK.BOTH) ##################### ############################### # (5) Separator 2 ############# self.formatSeparator2 = TKttk.Separator(self.editingPresetSettingsFrame) self.formatSeparator2.config(style = 'separator1.TSeparator') self.formatSeparator2.config(orient = TK.VERTICAL) self.formatSeparator2.pack(fill = TK.Y, padx = GUI.R('formatVerticalSeparatorPadY'), side = TK.LEFT) ############################### # (5) Lokalizacja danych ###### self.editingPresetDLFrame = TKttk.Frame(self.editingPresetSettingsFrame) self.editingPresetDLFrame.config(style = 'layoutFrame.TFrame') self.editingPresetDLFrame.pack(fill = TK.BOTH, side = TK.RIGHT) self.editingPresetDLFrame.grid_columnconfigure(1, weight = 1) self.editingPresetDLFrame.grid_columnconfigure(2, weight = 1) # C1 - "Wiersz" self.EPDLC1Label = TKttk.Label(self.editingPresetDLFrame) self.EPDLC1Label.config(style = 'label1.TLabel') self.EPDLC1Label.config(text = 'Wiersz') self.EPDLC1Label.grid(row = 0, column = 1, padx = GUI.R('EPDataLocalizationPadX'), pady = GUI.R('EPDataLocalizationPadY')) # C2 - "Pozycja w wierszu" self.EPDLC2Label = TKttk.Label(self.editingPresetDLFrame) self.EPDLC2Label.config(style = 'label1.TLabel') self.EPDLC2Label.config(justify = TK.CENTER) self.EPDLC2Label.config(text = 'Pozycja\nw wierszu') self.EPDLC2Label.grid(row = 0, column = 2, padx = GUI.R('EPDataLocalizationPadX'), pady = GUI.R('EPDataLocalizationPadY')) # W1 - "Login" self.EPDLW1Label = TKttk.Label(self.editingPresetDLFrame) self.EPDLW1Label.config(style = 'label1.TLabel') self.EPDLW1Label.config(text = 'Login') self.EPDLW1Label.grid(row = 1, column = 0, padx = GUI.R('EPDataLocalizationPadX'), pady = GUI.R('EPDataLocalizationPadY')) # Lokalizacja loginu (wiersz) self.EPDLLoginRowVar = TK.IntVar() self.EPDLLoginRowSpinbox = TKttk.Spinbox(self.editingPresetDLFrame) self.EPDLLoginRowSpinbox.config(textvariable = self.EPDLLoginRowVar) self.EPDLLoginRowSpinbox.config(from_ = 0) self.EPDLLoginRowSpinbox.config(to = 1000000) self.EPDLLoginRowSpinbox.config(state = TK.DISABLED) self.EPDLLoginRowSpinbox.config(style = 'spinbox1.TSpinbox') self.EPDLLoginRowSpinbox.grid(row = 1, column = 1, padx = GUI.R('EPDataLocalizationPadX'), pady = GUI.R('EPDataLocalizationPadY')) # Lokalizacja loginu (pozycja w wierszu) self.EPDLLoginPosInRowVar = TK.IntVar() self.EPDLLoginPosInRowSpinbox = TKttk.Spinbox(self.editingPresetDLFrame) self.EPDLLoginPosInRowSpinbox.config(textvariable = self.EPDLLoginPosInRowVar) self.EPDLLoginPosInRowSpinbox.config(from_ = 0) self.EPDLLoginPosInRowSpinbox.config(to = 1000000) self.EPDLLoginPosInRowSpinbox.config(state = TK.DISABLED) self.EPDLLoginPosInRowSpinbox.config(style = 'spinbox1.TSpinbox') self.EPDLLoginPosInRowSpinbox.grid(row = 1, column = 2, padx = GUI.R('EPDataLocalizationPadX'), pady = GUI.R('EPDataLocalizationPadY')) # W2 - "Imię" self.EPDLW2Label = TKttk.Label(self.editingPresetDLFrame) self.EPDLW2Label.config(style = 'label1.TLabel') self.EPDLW2Label.config(text = 'Imię') self.EPDLW2Label.grid(row = 2, column = 0, padx = GUI.R('EPDataLocalizationPadX'), pady = GUI.R('EPDataLocalizationPadY')) # Lokalizacja imienia (wiersz) self.EPDLFnameRowVar = TK.IntVar() self.EPDLFnameRowSpinbox = TKttk.Spinbox(self.editingPresetDLFrame) self.EPDLFnameRowSpinbox.config(textvariable = self.EPDLFnameRowVar) self.EPDLFnameRowSpinbox.config(from_ = 0) self.EPDLFnameRowSpinbox.config(to = 1000000) self.EPDLFnameRowSpinbox.config(state = TK.DISABLED) self.EPDLFnameRowSpinbox.config(style = 'spinbox1.TSpinbox') self.EPDLFnameRowSpinbox.grid(row = 2, column = 1, padx = GUI.R('EPDataLocalizationPadX'), pady = GUI.R('EPDataLocalizationPadY')) # Lokalizacja imienia (pozycja w wierszu) self.EPDLFnamePosInRowVar = TK.IntVar() self.EPDLFnamePosInRowSpinbox = TKttk.Spinbox(self.editingPresetDLFrame) self.EPDLFnamePosInRowSpinbox.config(textvariable = self.EPDLFnamePosInRowVar) self.EPDLFnamePosInRowSpinbox.config(from_ = 0) self.EPDLFnamePosInRowSpinbox.config(to = 1000000) self.EPDLFnamePosInRowSpinbox.config(state = TK.DISABLED) self.EPDLFnamePosInRowSpinbox.config(style = 'spinbox1.TSpinbox') self.EPDLFnamePosInRowSpinbox.grid(row = 2, column = 2, padx = GUI.R('EPDataLocalizationPadX'), pady = GUI.R('EPDataLocalizationPadY')) # W3 - "Nazwisko" self.EPDLW3Label = TKttk.Label(self.editingPresetDLFrame) self.EPDLW3Label.config(style = 'label1.TLabel') self.EPDLW3Label.config(text = 'Nazwisko') self.EPDLW3Label.grid(row = 3, column = 0, padx = GUI.R('EPDataLocalizationPadX'), pady = GUI.R('EPDataLocalizationPadY')) # Lokalizacja nazwiska (wiersz) self.EPDLLnameRowVar = TK.IntVar() self.EPDLLnameRowSpinbox = TKttk.Spinbox(self.editingPresetDLFrame) self.EPDLLnameRowSpinbox.config(textvariable = self.EPDLLnameRowVar) self.EPDLLnameRowSpinbox.config(from_ = 0) self.EPDLLnameRowSpinbox.config(to = 1000000) self.EPDLLnameRowSpinbox.config(state = TK.DISABLED) self.EPDLLnameRowSpinbox.config(style = 'spinbox1.TSpinbox') self.EPDLLnameRowSpinbox.grid(row = 3, column = 1, padx = GUI.R('EPDataLocalizationPadX'), pady = GUI.R('EPDataLocalizationPadY')) # Lokalizacja nazwiska (pozycja w wierszu) self.EPDLLnamePosInRowVar = TK.IntVar() self.EPDLLnamePosInRowSpinbox = TKttk.Spinbox(self.editingPresetDLFrame) self.EPDLLnamePosInRowSpinbox.config(textvariable = self.EPDLLnamePosInRowVar) self.EPDLLnamePosInRowSpinbox.config(from_ = 0) self.EPDLLnamePosInRowSpinbox.config(to = 1000000) self.EPDLLnamePosInRowSpinbox.config(state = TK.DISABLED) self.EPDLLnamePosInRowSpinbox.config(style = 'spinbox1.TSpinbox') self.EPDLLnamePosInRowSpinbox.grid(row = 3, column = 2, padx = GUI.R('EPDataLocalizationPadX'), pady = GUI.R('EPDataLocalizationPadY')) # W4 - "Szkoła" self.EPDLW4Label = TKttk.Label(self.editingPresetDLFrame) self.EPDLW4Label.config(style = 'label1.TLabel') self.EPDLW4Label.config(text = 'Szkoła') self.EPDLW4Label.grid(row = 4, column = 0, padx = GUI.R('EPDataLocalizationPadX'), pady = GUI.R('EPDataLocalizationPadY')) # Lokalizacja nazwiska (wiersz) self.EPDLSchoolRowVar = TK.IntVar() self.EPDLSchoolRowSpinbox = TKttk.Spinbox(self.editingPresetDLFrame) self.EPDLSchoolRowSpinbox.config(textvariable = self.EPDLSchoolRowVar) self.EPDLSchoolRowSpinbox.config(from_ = 0) self.EPDLSchoolRowSpinbox.config(to = 1000000) self.EPDLSchoolRowSpinbox.config(state = TK.DISABLED) self.EPDLSchoolRowSpinbox.config(style = 'spinbox1.TSpinbox') self.EPDLSchoolRowSpinbox.grid(row = 4, column = 1, padx = GUI.R('EPDataLocalizationPadX'), pady = GUI.R('EPDataLocalizationPadY')) # Lokalizacja nazwiska (pozycja w wierszu) self.EPDLSchoolPosInRowVar = TK.IntVar() self.EPDLSchoolPosInRowSpinbox = TKttk.Spinbox(self.editingPresetDLFrame) self.EPDLSchoolPosInRowSpinbox.config(textvariable = self.EPDLSchoolPosInRowVar) self.EPDLSchoolPosInRowSpinbox.config(from_ = 0) self.EPDLSchoolPosInRowSpinbox.config(to = 1000000) self.EPDLSchoolPosInRowSpinbox.config(state = TK.DISABLED) self.EPDLSchoolPosInRowSpinbox.config(style = 'spinbox1.TSpinbox') self.EPDLSchoolPosInRowSpinbox.grid(row = 4, column = 2, padx = GUI.R('EPDataLocalizationPadX'), pady = GUI.R('EPDataLocalizationPadY')) # W5 - "Klasa" self.EPDLW5Label = TKttk.Label(self.editingPresetDLFrame) self.EPDLW5Label.config(style = 'label1.TLabel') self.EPDLW5Label.config(text = 'Klasa') self.EPDLW5Label.grid(row = 5, column = 0, padx = GUI.R('EPDataLocalizationPadX'), pady = GUI.R('EPDataLocalizationPadY')) # Lokalizacja nazwiska (wiersz) self.EPDLClassRowVar = TK.IntVar() self.EPDLClassRowSpinbox = TKttk.Spinbox(self.editingPresetDLFrame) self.EPDLClassRowSpinbox.config(textvariable = self.EPDLClassRowVar) self.EPDLClassRowSpinbox.config(from_ = 0) self.EPDLClassRowSpinbox.config(to = 1000000) self.EPDLClassRowSpinbox.config(state = TK.DISABLED) self.EPDLClassRowSpinbox.config(style = 'spinbox1.TSpinbox') self.EPDLClassRowSpinbox.grid(row = 5, column = 1, padx = GUI.R('EPDataLocalizationPadX'), pady = GUI.R('EPDataLocalizationPadY')) # Lokalizacja nazwiska (pozycja w wierszu) self.EPDLClassPosInRowVar = TK.IntVar() self.EPDLClassPosInRowSpinbox = TKttk.Spinbox(self.editingPresetDLFrame) self.EPDLClassPosInRowSpinbox.config(textvariable = self.EPDLClassPosInRowVar) self.EPDLClassPosInRowSpinbox.config(from_ = 0) self.EPDLClassPosInRowSpinbox.config(to = 1000000) self.EPDLClassPosInRowSpinbox.config(state = TK.DISABLED) self.EPDLClassPosInRowSpinbox.config(style = 'spinbox1.TSpinbox') self.EPDLClassPosInRowSpinbox.grid(row = 5, column = 2, padx = GUI.R('EPDataLocalizationPadX'), pady = GUI.R('EPDataLocalizationPadY')) ############################### ######################################### ################################################### # (1) Separator 3 ########################################### self.formatSeparator3 = TKttk.Separator(self.formatFrame) self.formatSeparator3.config(style = 'separator1.TSeparator') self.formatSeparator3.config(orient = TK.HORIZONTAL) self.formatSeparator3.pack(fill = TK.X, pady = GUI.R('formatHorizontalSeparatorPadY')) ############################################################# # (2) Przyciski ############################################# self.editingPresetButtonsFrame = TKttk.Frame(self.formatFrame) self.editingPresetButtonsFrame.config(style = 'layoutFrame.TFrame') self.editingPresetButtonsFrame.pack(fill = TK.X, side = TK.BOTTOM, pady = GUI.R('editingPresetButtonsPadY')) # Przycisk 'ZAPISZ' self.editingPresetSaveButton = TKttk.Button(self.editingPresetButtonsFrame) self.editingPresetSaveButton.config(command = self.editingPresetSaveButtonAction) self.editingPresetSaveButton.config(state = TK.DISABLED) self.editingPresetSaveButton.config(style = 'button1.TButton') self.editingPresetSaveButton.config(width = GUI.R('editingPresetSaveButtonWidth')) self.editingPresetSaveButton.config(text = 'ZAPISZ') self.editingPresetSaveButton.pack(side = TK.LEFT, expand = 1) # Przycisk 'Anuluj' self.editingPresetCancelButton = TKttk.Button(self.editingPresetButtonsFrame) self.editingPresetCancelButton.config(command = self.editingPresetCancelButtonAction) self.editingPresetCancelButton.config(state = TK.DISABLED) self.editingPresetCancelButton.config(style = 'button1.TButton') self.editingPresetCancelButton.config(width = GUI.R('editingPresetCancelButtonWidth')) self.editingPresetCancelButton.config(text = 'Anuluj') self.editingPresetCancelButton.pack(side = TK.RIGHT, expand = 1) ############################################################# ###################################################################### # TAB3 - Ustawienia ################################################## self.settingsTab = TKttk.Frame(self.mainMenu) self.settingsTab.config(style = "mainMenuTabFrame.TFrame") self.settingsTabImg = PLimg.open(GUI.R('settingsTabIcon')) self.settingsTabImg = self.settingsTabImg.resize((GUI.R('tabIconsSize'), GUI.R('tabIconsSize')), PLimg.ANTIALIAS) self.settingsTabImg = PLitk.PhotoImage(self.settingsTabImg) self.mainMenu.add(self.settingsTab, image = self.settingsTabImg, state = TK.NORMAL) # Nagłówek self.settingsHeader = TKttk.Label(self.settingsTab) self.settingsHeader.config(style = 'tabHeader.TLabel') self.settingsHeader.config(text = 'USTAWIENIA') self.settingsHeader.pack(fill = GUI.R('headerFill')) # Zawartość self.settingsFrame = TKttk.Frame(self.settingsTab) self.settingsFrame.config(style = 'contentTabFrame.TFrame') self.settingsFrame.pack(fill = GUI.R('contentTabFrameFill'), expand = GUI.R('contentTabFrameExpand'), padx = GUI.R('tabFramePadding'), pady = GUI.R('tabFramePadding')) ###################################################################### # TAB4 - O programie ################################################# self.aboutTab = TKttk.Frame(self.mainMenu) self.aboutTab.config(style = "mainMenuTabFrame.TFrame") self.aboutTabImg = PLimg.open(GUI.R('aboutTabIcon')) self.aboutTabImg = self.aboutTabImg.resize((GUI.R('tabIconsSize'), GUI.R('tabIconsSize')), PLimg.ANTIALIAS) self.aboutTabImg = PLitk.PhotoImage(self.aboutTabImg) self.mainMenu.add(self.aboutTab, image = self.aboutTabImg, state = TK.NORMAL) # Nagłówek self.aboutHeader = TKttk.Label(self.aboutTab) self.aboutHeader.config(style = 'tabHeader.TLabel') self.aboutHeader.config(text = 'O PROGRAMIE') self.aboutHeader.pack(fill = GUI.R('headerFill')) # Zawartość self.aboutFrame = TKttk.Frame(self.aboutTab) self.aboutFrame.config(style = 'contentTabFrame.TFrame') self.aboutFrame.pack(fill = GUI.R('contentTabFrameFill'), expand = GUI.R('contentTabFrameExpand'), padx = GUI.R('tabFramePadding'), pady = GUI.R('tabFramePadding')) ###################################################################### # Akcje przycisków - TAB1 def GIF1SLocalizationButtonAction(self): filename = str(TKfld.askopenfilename(initialdir = '/', title = "Wybierz plik z danymi")) self.GIF1SLocalizationEntryVar.set(filename) def GIF2SLocalizationButtonAction(self): filename = str(TKfld.askopenfilename(initialdir = '/', title = "Wybierz plik z danymi")) self.GIF2SLocalizationEntryVar.set(filename) def GIF3SLocalizationButtonAction(self): filename = str(TKfld.askopenfilename(initialdir = '/', title = "Wybierz plik z danymi")) self.GIF3SLocalizationEntryVar.set(filename) def GIF4SLocalizationButtonAction(self): filename = str(TKfld.askopenfilename(initialdir = '/', title = "Wybierz plik z danymi")) self.GIF4SLocalizationEntryVar.set(filename) def GOFMailButtonAction(self): filename = str(TKfld.asksaveasfilename(initialdir = '/', title = "Wybierz miejsce zapisu pliku csv dla poczty", filetypes = [('Plik CSV', '*.csv')])) if not filename: return if not filename.endswith('.csv'): filename += '.csv' self.GOFMailEntryVar.set(filename) def GOFOfficeButtonAction(self): filename = str(TKfld.asksaveasfilename(initialdir = '/', title = "Wybierz miejsce zapisu pliku csv dla Office", filetypes = [('Plik CSV', '*.csv')])) if not filename: return if not filename.endswith('.csv'): filename += '.csv' self.GOFOfficeEntryVar.set(filename) def generateStartButtonAction(self): if MSG('A0003', False): GIF1SFilename = self.GIF1SLocalizationEntryVar.get() GIF1SFormat = self.GIF1SFormatComboboxVar.get() GIF2SFilename = self.GIF2SLocalizationEntryVar.get() GIF2SFormat = self.GIF2SFormatComboboxVar.get() GIF3SFilename = self.GIF3SLocalizationEntryVar.get() GIF3SFormat = self.GIF3SFormatComboboxVar.get() GIF4SFilename = self.GIF4SLocalizationEntryVar.get() GIF4SFormat = self.GIF4SFormatComboboxVar.get() GOFMailFilename = self.GOFMailEntryVar.get() GOFOfficeFilename = self.GOFOfficeEntryVar.get() GIF1 = (GIF1SFilename, GIF1SFormat) GIF2 = (GIF2SFilename, GIF2SFormat) GIF3 = (GIF3SFilename, GIF3SFormat) GIF4 = (GIF4SFilename, GIF4SFormat) GOF = (GOFMailFilename, GOFOfficeFilename) filesList = (GIF1, GIF2, GIF3, GIF4, GOF) output = dataProcess.start(filesList) if not output[0]: MSG('E0007', False) else: if not output[1]: MSG('E0008', False) else: if not output[2]: MSG('E0009', False) else: pass else: return # Akcje przycisków - TAB2 def loadingButtonAction(self): formatFileContent = FMT.R(self.loadingList.get()) self.loadingList['state'] = TK.DISABLED self.loadingButton['state'] = TK.DISABLED self.EPOSTypeVar.set(formatFileContent['student']) self.EPOSTypeStudentRadiobutton['state'] = TK.NORMAL self.EPOSTypeTeacherRadiobutton['state'] = TK.NORMAL self.EPOSPersonSeparatorEntry['state'] = TK.NORMAL self.EPOSPersonSeparatorVar.set(formatFileContent['personSeparator']) self.EPOSRowSeparatorEntry['state'] = TK.NORMAL self.EPOSRowSeparatorVar.set(formatFileContent['rowSeparator']) self.EPOSDataSeparatorText['state'] = TK.NORMAL self.EPOSDataSeparatorText.insert(TK.END, '\n'.join(formatFileContent['dataSeparators'])) self.EPDLLoginRowSpinbox['state'] = TK.NORMAL self.EPDLLoginRowVar.set(formatFileContent['loginRow']) self.EPDLLoginPosInRowSpinbox['state'] = TK.NORMAL self.EPDLLoginPosInRowVar.set(formatFileContent['loginPositionInRow']) self.EPDLFnameRowSpinbox['state'] = TK.NORMAL self.EPDLFnameRowVar.set(formatFileContent['fnameRow']) self.EPDLFnamePosInRowSpinbox['state'] = TK.NORMAL self.EPDLFnamePosInRowVar.set(formatFileContent['fnamePositionInRow']) self.EPDLLnameRowSpinbox['state'] = TK.NORMAL self.EPDLLnameRowVar.set(formatFileContent['lnameRow']) self.EPDLLnamePosInRowSpinbox['state'] = TK.NORMAL self.EPDLLnamePosInRowVar.set(formatFileContent['lnamePositionInRow']) self.EPDLSchoolRowSpinbox['state'] = TK.NORMAL self.EPDLSchoolRowVar.set(formatFileContent['schoolRow']) self.EPDLSchoolPosInRowSpinbox['state'] = TK.NORMAL self.EPDLSchoolPosInRowVar.set(formatFileContent['schoolPositionInRow']) self.EPDLClassRowSpinbox['state'] = TK.NORMAL self.EPDLClassRowVar.set(formatFileContent['classRow']) self.EPDLClassPosInRowSpinbox['state'] = TK.NORMAL self.EPDLClassPosInRowVar.set(formatFileContent['classPositionInRow']) self.editingPresetSaveButton['state'] = TK.NORMAL self.editingPresetCancelButton['state'] = TK.NORMAL def editingPresetClear(self): formatFileContent = { "student" : True, "personSeparator" : '', "rowSeparator" : '', "dataSeparators" : [], "loginRow" : 0, "loginPositionInRow" : 0, "fnameRow" : 0, "fnamePositionInRow" : 0, "lnameRow" : 0, "lnamePositionInRow" : 0, "schoolRow" : 0, "schoolPositionInRow" : 0, "classRow" : 0, "classPositionInRow" : 0, } self.loadingList['state'] = TK.NORMAL self.loadingButton['state'] = TK.NORMAL self.EPOSTypeVar.set(formatFileContent['student']) self.EPOSTypeStudentRadiobutton['state'] = TK.DISABLED self.EPOSTypeTeacherRadiobutton['state'] = TK.DISABLED self.EPOSPersonSeparatorEntry['state'] = TK.DISABLED self.EPOSPersonSeparatorVar.set(formatFileContent['personSeparator']) self.EPOSRowSeparatorEntry['state'] = TK.DISABLED self.EPOSRowSeparatorVar.set(formatFileContent['rowSeparator']) self.EPOSDataSeparatorText.delete('1.0', TK.END) self.EPOSDataSeparatorText['state'] = TK.DISABLED self.EPDLLoginRowSpinbox['state'] = TK.DISABLED self.EPDLLoginRowVar.set(formatFileContent['loginRow']) self.EPDLLoginPosInRowSpinbox['state'] = TK.DISABLED self.EPDLLoginPosInRowVar.set(formatFileContent['loginPositionInRow']) self.EPDLFnameRowSpinbox['state'] = TK.DISABLED self.EPDLFnameRowVar.set(formatFileContent['fnameRow']) self.EPDLFnamePosInRowSpinbox['state'] = TK.DISABLED self.EPDLFnamePosInRowVar.set(formatFileContent['fnamePositionInRow']) self.EPDLLnameRowSpinbox['state'] = TK.DISABLED self.EPDLLnameRowVar.set(formatFileContent['lnameRow']) self.EPDLLnamePosInRowSpinbox['state'] = TK.DISABLED self.EPDLLnamePosInRowVar.set(formatFileContent['lnamePositionInRow']) self.EPDLSchoolRowSpinbox['state'] = TK.DISABLED self.EPDLSchoolRowVar.set(formatFileContent['schoolRow']) self.EPDLSchoolPosInRowSpinbox['state'] = TK.DISABLED self.EPDLSchoolPosInRowVar.set(formatFileContent['schoolPositionInRow']) self.EPDLClassRowSpinbox['state'] = TK.DISABLED self.EPDLClassRowVar.set(formatFileContent['classRow']) self.EPDLClassPosInRowSpinbox['state'] = TK.DISABLED self.EPDLClassPosInRowVar.set(formatFileContent['classPositionInRow']) self.editingPresetSaveButton['state'] = TK.DISABLED self.editingPresetCancelButton['state'] = TK.DISABLED self.loadingList['values'] = tuple(FMT.getList()) def editingPresetSave(self): formatFileContentToSave = { "student" : self.EPOSTypeVar.get(), "personSeparator" : self.EPOSPersonSeparatorEntry.get(), "rowSeparator" : self.EPOSRowSeparatorEntry.get(), "dataSeparators" : (self.EPOSDataSeparatorText.get("1.0", TK.END)).split('\n')[:-1], "loginRow" : int(self.EPDLLoginRowSpinbox.get()), "loginPositionInRow" : int(self.EPDLLoginPosInRowSpinbox.get()), "fnameRow" : int(self.EPDLFnameRowSpinbox.get()), "fnamePositionInRow" : int(self.EPDLFnamePosInRowSpinbox.get()), "lnameRow" : int(self.EPDLLnameRowSpinbox.get()), "lnamePositionInRow" : int(self.EPDLLnamePosInRowSpinbox.get()), "schoolRow" : int(self.EPDLSchoolRowSpinbox.get()), "schoolPositionInRow" : int(self.EPDLSchoolPosInRowSpinbox.get()), "classRow" : int(self.EPDLClassRowSpinbox.get()), "classPositionInRow" : int(self.EPDLClassPosInRowSpinbox.get()), } if not FMT.W(self.loadingList.get(), formatFileContentToSave): return self.editingPresetClear() def editingPresetSaveButtonAction(self): if self.loadingList.get() not in FMT.getList(): if MSG('A0001', False): self.editingPresetSave() else: return else: if MSG('A0002', False): self.editingPresetSave() else: return def editingPresetCancelButtonAction(self): self.editingPresetClear() # Inicjacja okna root = TK.Tk() windowInit = mainWindow(root) root.mainloop()