Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Course_work/15var (IV semester) .py
- import tkinter
- import tkinter.ttk as ttk
- import tkinter.filedialog
- class WorldRecords:
- def __init__(self, id, result, author, year):
- self.id = id
- self.result = result
- self.author = author
- self.year = year
- def setId(self, id):
- self.id = id
- def getId(self):
- return self.id
- def setresult(self, result):
- self.result = result
- def getresult(self):
- return self.result
- def setauthor(self, author):
- self.author = author
- def getauthor(self):
- return self.author
- def setyear(self, year):
- self.year = year
- def getyear(self):
- return self.year
- def Center(toplevel):
- toplevel.update_idletasks()
- w = toplevel.winfo_screenwidth()
- h = toplevel.winfo_screenheight()
- size = tuple(int(_) for _ in toplevel.geometry().split('+')[0].split('x'))
- x = w / 2 - size[0] / 2
- y = h / 2 - size[1] / 2
- toplevel.geometry("%dx%d+%d+%d" % (size + (x, y)))
- def OnOpen():
- ftypes = [('Python files', '*.txt'), ('All files', '*')]
- dlg = tkinter.filedialog.Open(filetypes=ftypes)
- fl = dlg.show()
- if fl != '':
- print(fl)
- ReadFileText(fl)
- def OnSave():
- file = open(path, 'w')
- result = ''
- for i in range(0, len(arrayWorldRecords)):
- if (i < len(arrayWorldRecords) - 1):
- result += str(arrayWorldRecords[i].getresult()) + '\t' + str(arrayWorldRecords[i].getauthor()) + '\t' + str(
- arrayWorldRecords[i].getyear()) + '\n'
- else:
- result += str(arrayWorldRecords[i].getresult()) + '\t' + str(arrayWorldRecords[i].getauthor()) + '\t' + str(
- arrayWorldRecords[i].getyear())
- print(arrayWorldRecords[i].getyear())
- file.write(result)
- file.close()
- def ReadFileText(arg):
- global path, screen, root, arrayWorldRecords
- path = arg
- file = open(path, 'rt')
- inputFile = []
- arrayWorldRecords = []
- for line in file:
- row = [i for i in line.split('\t')]
- inputFile.append(row)
- countId = 0
- for line in inputFile:
- countId += 1
- arrayWorldRecords.append(WorldRecords(countId, float(line[0]), line[1], int(line[2].replace("\n", ""))))
- for i in range(0, len(arrayWorldRecords)):
- print(arrayWorldRecords[i].getauthor())
- if (screen == 0):
- screen = TableScreen(root)
- screen.pack(side="top", fill="both", expand=True)
- screen.LoadTable(arrayWorldRecords)
- file.close()
- # ---1.2
- def AddWorldRecord():
- addWindow = tkinter.Tk()
- addWindow.geometry('225x250')
- addWindow.title("Add")
- Center(addWindow)
- global resultEntryBox, authorEntryBox, recordEntryBox
- resultLabel = tkinter.Label(addWindow, text='Enter a result')
- resultLabel.pack(side=tkinter.TOP)
- resultEntryBox = tkinter.Entry(addWindow)
- resultEntryBox.focus_set()
- resultEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
- # 2
- authorLabel = tkinter.Label(addWindow, text='Enter a author')
- authorLabel.pack(side=tkinter.TOP)
- authorEntryBox = tkinter.Entry(addWindow)
- authorEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
- # 3
- countRecordLabel = tkinter.Label(addWindow, text='Enter a year')
- countRecordLabel.pack(side=tkinter.TOP)
- recordEntryBox = tkinter.Entry(addWindow)
- recordEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
- mySubmitButton = tkinter.Button(addWindow, text='Add', height=1, width=16, command=AddItem)
- mySubmitButton.pack()
- def AddItem():
- print(resultEntryBox.get())
- print(authorEntryBox.get())
- print(recordEntryBox.get())
- arrayWorldRecords.append(
- WorldRecords(len(arrayWorldRecords) + 1, float(resultEntryBox.get()), authorEntryBox.get(), int(recordEntryBox.get())))
- global screen
- if (screen == 0):
- screen = TableScreen(root)
- screen.pack(side="top", fill="both", expand=True)
- screen.LoadTable(arrayWorldRecords)
- # ---2.3
- def InsertBefore():
- insertWindow = tkinter.Tk()
- insertWindow.geometry('225x290')
- insertWindow.title("Insert")
- Center(insertWindow)
- global indexEntryBox, resultEntryBox, authorEntryBox, recordEntryBox
- indexLabel = tkinter.Label(insertWindow, text='Insert before index [1-' + str(len(arrayWorldRecords)) + ']')
- indexLabel.pack(side=tkinter.TOP)
- indexEntryBox = tkinter.Entry(insertWindow)
- indexEntryBox.focus_set()
- indexEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
- # 1
- resultLabel = tkinter.Label(insertWindow, text='Enter a result')
- resultLabel.pack(side=tkinter.TOP)
- resultEntryBox = tkinter.Entry(insertWindow)
- resultEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
- # 2
- authorLabel = tkinter.Label(insertWindow, text='Enter a author')
- authorLabel.pack(side=tkinter.TOP)
- authorEntryBox = tkinter.Entry(insertWindow)
- authorEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
- # 3
- countRecordLabel = tkinter.Label(insertWindow, text='Enter a year')
- countRecordLabel.pack(side=tkinter.TOP)
- recordEntryBox = tkinter.Entry(insertWindow)
- recordEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
- mySubmitButton = tkinter.Button(insertWindow, text='Insert before', height=1, width=16, command=InsertItemBefore)
- mySubmitButton.pack()
- def InsertItemBefore():
- print(indexEntryBox.get())
- print(resultEntryBox.get())
- print(authorEntryBox.get())
- print(recordEntryBox.get())
- if (0 <= int(indexEntryBox.get()) - 1 < len(arrayWorldRecords)):
- arrayWorldRecords.insert(int(indexEntryBox.get()) - 1,
- WorldRecords(int(indexEntryBox.get()), float(resultEntryBox.get()), authorEntryBox.get(),
- int(recordEntryBox.get())))
- for i in range(len(arrayWorldRecords)):
- arrayWorldRecords[i].setId(i + 1)
- screen.LoadTable(arrayWorldRecords)
- else:
- print('Invalid index')
- # ---2.4
- def InsertAfter():
- insertWindow = tkinter.Tk()
- insertWindow.geometry('225x290')
- insertWindow.title("Insert")
- Center(insertWindow)
- global indexEntryBox, resultEntryBox, authorEntryBox, recordEntryBox
- indexLabel = tkinter.Label(insertWindow, text='Insert after index [1-' + str(len(arrayWorldRecords)) + ']')
- indexLabel.pack(side=tkinter.TOP)
- indexEntryBox = tkinter.Entry(insertWindow)
- indexEntryBox.focus_set()
- indexEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
- # 1
- resultLabel = tkinter.Label(insertWindow, text='Enter a result')
- resultLabel.pack(side=tkinter.TOP)
- resultEntryBox = tkinter.Entry(insertWindow)
- resultEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
- # 2
- authorLabel = tkinter.Label(insertWindow, text='Enter a author')
- authorLabel.pack(side=tkinter.TOP)
- authorEntryBox = tkinter.Entry(insertWindow)
- authorEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
- # 3
- countRecordLabel = tkinter.Label(insertWindow, text='Enter a year')
- countRecordLabel.pack(side=tkinter.TOP)
- recordEntryBox = tkinter.Entry(insertWindow)
- recordEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
- mySubmitButton = tkinter.Button(insertWindow, text='Insert after', height=1, width=16, command=InsertItemAfter)
- mySubmitButton.pack()
- def InsertItemAfter():
- print(indexEntryBox.get())
- print(resultEntryBox.get())
- print(authorEntryBox.get())
- print(recordEntryBox.get())
- if (0 <= int(indexEntryBox.get()) - 1 < len(arrayWorldRecords)):
- arrayWorldRecords.insert(int(indexEntryBox.get()),
- WorldRecords(int(indexEntryBox.get()), float(resultEntryBox.get()), authorEntryBox.get(),
- int(recordEntryBox.get())))
- for i in range(len(arrayWorldRecords)):
- arrayWorldRecords[i].setId(i + 1)
- screen.LoadTable(arrayWorldRecords)
- else:
- print('Invalid index')
- # ---2.8
- def SortWorldRecord():
- sortWindow = tkinter.Tk()
- sortWindow.geometry('225x250')
- sortWindow.title("Sort")
- Center(sortWindow)
- global indexFromEntryBox, indexToEntryBox, variableSortBy, variableSortReverse
- # from
- indexFromLabel = tkinter.Label(sortWindow, text='Index from [1-' + str(len(arrayWorldRecords)) + ']')
- indexFromLabel.pack(side=tkinter.TOP)
- indexFromEntryBox = tkinter.Entry(sortWindow)
- indexFromEntryBox.focus_set()
- indexFromEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
- # to
- indexToLabel = tkinter.Label(sortWindow, text='Index to [1-' + str(len(arrayWorldRecords)) + ']')
- indexToLabel.pack(side=tkinter.TOP)
- indexToEntryBox = tkinter.Entry(sortWindow)
- indexToEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
- # sortBy
- sortByLabel = tkinter.Label(sortWindow, text='Sort by')
- sortByLabel.pack(side=tkinter.TOP)
- variableSortBy = tkinter.StringVar(sortWindow)
- variableSortBy.set("Id") # default value
- sortOptionMenu = tkinter.OptionMenu(sortWindow, variableSortBy, "Id", "result", "author", "Year")
- sortOptionMenu.pack(side=tkinter.TOP)
- # reverse
- reverseLabel = tkinter.Label(sortWindow, text='Reverse sort')
- reverseLabel.pack(side=tkinter.TOP)
- variableSortReverse = tkinter.IntVar(sortWindow)
- variableSortReverse.set(0) # default value
- checkbutton = tkinter.Checkbutton(sortWindow, variable=variableSortReverse)
- checkbutton.pack(side=tkinter.TOP)
- # button
- mySubmitButton = tkinter.Button(sortWindow, text='Sort', height=1, width=16, command=SortItem)
- mySubmitButton.pack()
- def SortItem():
- global arrayWorldRecords
- print(indexFromEntryBox.get())
- print(indexToEntryBox.get())
- print(variableSortBy.get())
- print(variableSortReverse.get())
- if ((0 <= int(indexFromEntryBox.get()) - 1 < len(arrayWorldRecords))
- and (0 <= int(indexToEntryBox.get()) - 1 < len(arrayWorldRecords))
- and (int(indexFromEntryBox.get()) - 1 < int(indexToEntryBox.get()) - 1)):
- sortArrayWorldRecord = arrayWorldRecords[int(indexFromEntryBox.get()) - 1:int(indexToEntryBox.get())]
- if (variableSortBy.get() == 'Id'):
- sortArrayWorldRecord = sorted(sortArrayWorldRecord, key=lambda x: x.getId(), reverse=variableSortReverse.get())
- elif (variableSortBy.get() == 'result'):
- sortArrayWorldRecord = sorted(sortArrayWorldRecord, key=lambda x: x.getresult(), reverse=variableSortReverse.get())
- elif (variableSortBy.get() == 'author'):
- sortArrayWorldRecord = sorted(sortArrayWorldRecord, key=lambda x: x.getauthor(), reverse=variableSortReverse.get())
- elif (variableSortBy.get() == 'Year'):
- sortArrayWorldRecord = sorted(sortArrayWorldRecord, key=lambda x: x.getyear(), reverse=variableSortReverse.get())
- for i in range(len(sortArrayWorldRecord)):
- print(sortArrayWorldRecord[i].getresult(), sortArrayWorldRecord[i].getauthor(), sortArrayWorldRecord[i].getyear())
- screen.LoadTable(sortArrayWorldRecord)
- else:
- print('Invalid index')
- class TableScreen(tkinter.Frame):
- def __init__(self, parent):
- ttk.Frame.__init__(self, parent)
- if (tableIsCreated == 0):
- self.CreateUI()
- self.LoadTable(arrayWorldRecords)
- parent.grid_rowconfigure(0, weight=1)
- parent.grid_columnconfigure(0, weight=1)
- def CreateUI(self):
- tv = ttk.Treeview(self)
- tv['columns'] = ('result', 'author', 'year')
- tv.heading("#0", text='Id')
- tv.column("#0", width=1)
- tv.heading('result', text='Result')
- tv.column('result', anchor='center', width=100)
- tv.heading('author', text='Author')
- tv.column('author', anchor='center', width=100)
- tv.heading('year', text='Year')
- tv.column('year', anchor='center', width=100)
- tv.grid(sticky=(tkinter.N, tkinter.S, tkinter.W, tkinter.E))
- self.treeview = tv
- self.grid_rowconfigure(0, weight=1)
- self.grid_columnconfigure(0, weight=1)
- global tableIsCreated
- tableIsCreated = 1
- def LoadTable(self, arr):
- for i in self.treeview.get_children():
- self.treeview.delete(i)
- for i in range(len(arr)):
- print(arr[i].getId())
- print(arr[i].getresult())
- print(arr[i].getauthor())
- print(arr[i].getyear())
- self.treeview.insert('', 'end', text=str(arr[i].getId()),
- values=(arr[i].getresult(), arr[i].getauthor(), arr[i].getyear()))
- def main():
- global root, arrayWorldRecords, tableIsCreated, screen
- root = tkinter.Tk()
- root.geometry('750x500')
- root.title("World Records")
- arrayWorldRecords = []
- tableIsCreated = 0
- screen = 0
- menubar = tkinter.Menu(root)
- filemenu = tkinter.Menu(menubar, tearoff=0)
- filemenu.add_command(label="Open", command=OnOpen)
- filemenu.add_command(label="Save", command=OnSave)
- filemenu.add_separator()
- filemenu.add_command(label="Exit", command=root.quit)
- editmenu = tkinter.Menu(menubar, tearoff=0)
- editmenu.add_command(label="Add World Record", command=AddWorldRecord)
- editmenu.add_command(label="Insert before", command=InsertBefore)
- editmenu.add_command(label="Insert after", command=InsertAfter)
- menubar.add_cascade(label="File", menu=filemenu)
- menubar.add_cascade(label="Edit", menu=editmenu)
- menubar.add_command(label="Sort", command=SortWorldRecord)
- root.config(menu=menubar)
- Center(root)
- root.mainloop()
- if __name__ == "__main__":
- main()
- # Example database.txt
- 4.7 Рекрутов Виктор 1998
- 2.5 Геннадий Крот 1974
- 3.5 Александр Литов 2001
- 4.6 Жорик Ардамов 2004
- 5.0 Кирилл Рыбак 1999
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement