Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import tkinter
- import tkinter.ttk as ttk
- import tkinter.filedialog
- import math
- class Statement:
- def __init__(self, id, name, duration, averageMark):
- self.id = id
- self.name = name
- self.duration = duration
- self.averageMark = averageMark
- def setId(self, id):
- self.id = id
- def getId(self):
- return self.id
- def setname(self, name):
- self.name = name
- def getname(self):
- return self.name
- def setduration(self, duration):
- self.duration = duration
- def getduration(self):
- return self.duration
- def setAverageMark(self, averageMark):
- self.averageMark = averageMark
- def getAverageMark(self):
- return self.averageMark
- 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(arrayStatement)):
- if (i < len(arrayStatement) - 1):
- result += arrayStatement[i].getname() + '\t' + str(arrayStatement[i].getduration()) + '\t' + str(
- arrayStatement[i].getAverageMark()) + '\n'
- else:
- result += arrayStatement[i].getname() + '\t' + str(arrayStatement[i].getduration()) + '\t' + str(
- arrayStatement[i].getAverageMark())
- print(arrayStatement[i].getAverageMark())
- file.write(result)
- file.close()
- def ReadFileText(arg):
- global path, screen, root, arrayStatement
- path = arg
- file = open(path, encoding="utf8")
- inputFile = []
- arrayStatement = []
- for line in file:
- row = [i for i in line.split('\t')]
- inputFile.append(row)
- print("start open")
- countId = 0
- for line in inputFile:
- print (line[0])
- print (line[1])
- print (line[2])
- countId += 1
- arrayStatement.append(Statement(countId, line[0], int(line[1]), float(line[2].replace("\n", ""))))
- for i in range(0, len(arrayStatement)):
- print(arrayStatement[i].getname())
- if (screen == 0):
- screen = TableScreen(root)
- screen.pack(side="top", fill="both", expand=True)
- screen.LoadTable(arrayStatement)
- file.close()
- # ---1.2
- def AddTelecasts():
- addWindow = tkinter.Tk()
- addWindow.geometry('225x250')
- addWindow.title("Add")
- Center(addWindow)
- global nameEntryBox, durationEntryBox, averageMarkEntryBox
- nameLabel = tkinter.Label(addWindow, text='Enter a name')
- nameLabel.pack(side=tkinter.TOP)
- nameEntryBox = tkinter.Entry(addWindow)
- nameEntryBox.focus_set()
- nameEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
- # 2
- durationLabel = tkinter.Label(addWindow, text='Enter a duration')
- durationLabel.pack(side=tkinter.TOP)
- durationEntryBox = tkinter.Entry(addWindow)
- durationEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
- # 3
- countAverageMarkLabel = tkinter.Label(addWindow, text='Enter a average mark')
- countAverageMarkLabel.pack(side=tkinter.TOP)
- averageMarkEntryBox = tkinter.Entry(addWindow)
- averageMarkEntryBox.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(nameEntryBox.get())
- print(durationEntryBox.get())
- print(averageMarkEntryBox.get())
- arrayStatement.append(
- Statement(len(arrayStatement) + 1, nameEntryBox.get(), int(durationEntryBox.get()), float(averageMarkEntryBox.get())))
- screen.LoadTable(arrayStatement)
- def Replace():
- insertWindow = tkinter.Tk()
- insertWindow.geometry('225x290')
- insertWindow.title("Insert")
- Center(insertWindow)
- global indexEntryBox, CreateEntryBox, NameEntryBox, ExpensesEntryBox
- indexLabel = tkinter.Label(insertWindow, text='Replace index [1-' + str(len(arrayStatement)) + ']')
- indexLabel.pack(side=tkinter.TOP)
- indexEntryBox = tkinter.Entry(insertWindow)
- indexEntryBox.focus_set()
- indexEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
- CreateLabel = tkinter.Label(insertWindow, text='Enter a Create')
- CreateLabel.pack(side=tkinter.TOP)
- CreateEntryBox = tkinter.Entry(insertWindow)
- CreateEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
- NameLabel = tkinter.Label(insertWindow, text='Enter a Name')
- NameLabel.pack(side=tkinter.TOP)
- NameEntryBox = tkinter.Entry(insertWindow)
- NameEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
- countExpensesLabel = tkinter.Label(insertWindow, text='Enter a Expensess')
- countExpensesLabel.pack(side=tkinter.TOP)
- ExpensesEntryBox = tkinter.Entry(insertWindow)
- ExpensesEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
- mySubmitButton = tkinter.Button(insertWindow, text='Replace', height=1, width=16, command=ReplaceItem)
- mySubmitButton.pack()
- def ReplaceItem():
- print(indexEntryBox.get())
- print(CreateEntryBox.get())
- print(NameEntryBox.get())
- print(ExpensesEntryBox.get())
- if (0 <= int(indexEntryBox.get())-1 < len(arrayStatement)):
- array = []
- for i in range(len(arrayStatement)):
- if i != int(indexEntryBox.get())-1:
- arrayStatement[i] = arrayStatement[i]
- else:
- arrayStatement[i] = Statement(int(indexEntryBox.get()), int(CreateEntryBox.get()), NameEntryBox.get(),
- ExpensesEntryBox.get())
- for i in range(len(arrayStatement)):
- arrayStatement[i].setId(i + 1)
- screen.LoadTable(arrayStatement)
- else:
- print('Invalid index')
- # ---2.8
- def SortTelecasts():
- 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(arrayStatement)) + ']')
- 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(arrayStatement)) + ']')
- 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", "name", "duration", "Average Mark")
- 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 arrayStatement
- print(indexFromEntryBox.get())
- print(indexToEntryBox.get())
- print(variableSortBy.get())
- print(variableSortReverse.get())
- if ((0 <= int(indexFromEntryBox.get()) - 1 < len(arrayStatement))
- and (0 <= int(indexToEntryBox.get()) - 1 < len(arrayStatement))
- and (int(indexFromEntryBox.get()) - 1 < int(indexToEntryBox.get()) - 1)):
- global sortArrayTelecasts
- sortArrayTelecasts = arrayStatement[int(indexFromEntryBox.get()) - 1:int(indexToEntryBox.get())]
- if (variableSortBy.get() == 'Id'):
- sortArrayTelecasts = sorted(sortArrayTelecasts, key=lambda x: x.getId(), reverse=variableSortReverse.get())
- elif (variableSortBy.get() == 'name'):
- sortArrayTelecasts = sorted(sortArrayTelecasts, key=lambda x: x.getname().lower(), reverse=variableSortReverse.get())
- elif (variableSortBy.get() == 'duration'):
- sortArrayTelecasts = sorted(sortArrayTelecasts, key=lambda x: x.getduration(), reverse=variableSortReverse.get())
- elif (variableSortBy.get() == 'Average Mark'):
- sortArrayTelecasts = sorted(sortArrayTelecasts, key=lambda x: x.getAverageMark(), reverse=variableSortReverse.get())
- for i in range(len(sortArrayTelecasts)):
- print(sortArrayTelecasts[i].getname(), sortArrayTelecasts[i].getduration(), sortArrayTelecasts[i].getAverageMark())
- screen.LoadTable(sortArrayTelecasts)
- averageIndex = math.floor(len(sortArrayTelecasts)/2)
- AverageValue(averageIndex)
- else:
- print('Invalid index')
- def AverageValue(averageIndex):
- averageWindow = tkinter.Tk()
- averageWindow.geometry('225x250')
- averageWindow.title("Average value")
- Center(averageWindow)
- global nameEntryBox, durationEntryBox, averageMarkEntryBox
- nameLabel = tkinter.Label(averageWindow, text=sortArrayTelecasts[averageIndex].getname())
- nameLabel.pack(side=tkinter.TOP)
- # 2
- durationLabel = tkinter.Label(averageWindow, text=sortArrayTelecasts[averageIndex].getduration())
- durationLabel.pack(side=tkinter.TOP)
- # 3
- countAverageMarkLabel = tkinter.Label(averageWindow, text=sortArrayTelecasts[averageIndex].getAverageMark())
- countAverageMarkLabel.pack(side=tkinter.TOP)
- mySubmitButton = tkinter.Button(averageWindow, text='Ok', height=1, width=16, command=averageWindow.destroy)
- mySubmitButton.pack()
- class TableScreen(tkinter.Frame):
- def __init__(self, parent):
- ttk.Frame.__init__(self, parent)
- if (tableIsCreated == 0):
- self.CreateUI()
- self.LoadTable(arrayStatement)
- parent.grid_rowconfigure(0, weight=1)
- parent.grid_columnconfigure(0, weight=1)
- def CreateUI(self):
- tv = ttk.Treeview(self)
- tv['columns'] = ('name', 'duration', 'averageMark')
- tv.heading("#0", text='Id')
- tv.column("#0", width=1)
- tv.heading('name', text='name')
- tv.column('name', anchor='center', width=100)
- tv.heading('duration', text='duration')
- tv.column('duration', anchor='center', width=100)
- tv.heading('averageMark', text='Average Mark')
- tv.column('averageMark', 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)):
- self.treeview.insert('', 'end', text=str(arr[i].getId()),
- values=(arr[i].getname(), arr[i].getduration(), arr[i].getAverageMark()))
- def main():
- global root, arrayStatement, tableIsCreated, screen
- root = tkinter.Tk()
- root.geometry('750x500')
- root.title("Telecasts")
- arrayStatement = []
- 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 Telecasts", command=AddTelecasts)
- # editmenu.add_command(label="Insert", command=InsertTelecasts)
- editmenu.add_command(label="Replace", command=Replace)
- menubar.add_cascade(label="File", menu=filemenu)
- menubar.add_cascade(label="Edit", menu=editmenu)
- menubar.add_command(label="Sort", command=SortTelecasts)
- root.config(menu=menubar)
- Center(root)
- root.mainloop()
- if __name__ == "__main__":
- main()
- #database.txt
- Интер 30 4.5
- Один плюс один 45 4.0
- ICTV 40 4.6
- Сигма 120 5.0
- МТВ 90 3.5
- ТРК Украина 45 3.6
- ТВ-7 20 4.0
- Новый канал 10 4.7
Advertisement
Add Comment
Please, Sign In to add comment