Xom9ik

Course_work/1var (IV semester) .py

May 21st, 2018
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 12.74 KB | None | 0 0
  1. import tkinter
  2. import tkinter.ttk as ttk
  3. import tkinter.filedialog
  4.  
  5. import math
  6.  
  7.  
  8. class Statement:
  9.     def __init__(self, id, name, duration, averageMark):
  10.         self.id = id
  11.         self.name = name
  12.         self.duration = duration
  13.         self.averageMark = averageMark
  14.  
  15.     def setId(self, id):
  16.         self.id = id
  17.  
  18.     def getId(self):
  19.         return self.id
  20.  
  21.     def setname(self, name):
  22.         self.name = name
  23.  
  24.     def getname(self):
  25.         return self.name
  26.  
  27.     def setduration(self, duration):
  28.         self.duration = duration
  29.  
  30.     def getduration(self):
  31.         return self.duration
  32.  
  33.     def setAverageMark(self, averageMark):
  34.         self.averageMark = averageMark
  35.  
  36.     def getAverageMark(self):
  37.         return self.averageMark
  38.  
  39. def Center(toplevel):
  40.     toplevel.update_idletasks()
  41.     w = toplevel.winfo_screenwidth()
  42.     h = toplevel.winfo_screenheight()
  43.     size = tuple(int(_) for _ in toplevel.geometry().split('+')[0].split('x'))
  44.     x = w / 2 - size[0] / 2
  45.     y = h / 2 - size[1] / 2
  46.     toplevel.geometry("%dx%d+%d+%d" % (size + (x, y)))
  47.  
  48.  
  49. def OnOpen():
  50.     ftypes = [('Python files', '*.txt'), ('All files', '*')]
  51.     dlg = tkinter.filedialog.Open(filetypes=ftypes)
  52.     fl = dlg.show()
  53.     if fl != '':
  54.         print(fl)
  55.         ReadFileText(fl)
  56.  
  57.  
  58. def OnSave():
  59.     file = open(path, 'w')
  60.     result = ''
  61.     for i in range(0, len(arrayStatement)):
  62.         if (i < len(arrayStatement) - 1):
  63.             result += arrayStatement[i].getname() + '\t' + str(arrayStatement[i].getduration()) + '\t' + str(
  64.                 arrayStatement[i].getAverageMark()) + '\n'
  65.         else:
  66.             result += arrayStatement[i].getname() + '\t' + str(arrayStatement[i].getduration()) + '\t' + str(
  67.                 arrayStatement[i].getAverageMark())
  68.         print(arrayStatement[i].getAverageMark())
  69.     file.write(result)
  70.     file.close()
  71.  
  72.  
  73. def ReadFileText(arg):
  74.     global path, screen, root, arrayStatement
  75.     path = arg
  76.     file = open(path, encoding="utf8")
  77.     inputFile = []
  78.     arrayStatement = []
  79.  
  80.     for line in file:
  81.         row = [i for i in line.split('\t')]
  82.         inputFile.append(row)
  83.     print("start open")
  84.  
  85.     countId = 0
  86.     for line in inputFile:
  87.         print (line[0])
  88.         print (line[1])
  89.         print (line[2])
  90.         countId += 1
  91.         arrayStatement.append(Statement(countId, line[0], int(line[1]), float(line[2].replace("\n", ""))))
  92.  
  93.     for i in range(0, len(arrayStatement)):
  94.         print(arrayStatement[i].getname())
  95.  
  96.     if (screen == 0):
  97.         screen = TableScreen(root)
  98.         screen.pack(side="top", fill="both", expand=True)
  99.     screen.LoadTable(arrayStatement)
  100.     file.close()
  101.  
  102.  
  103. # ---1.2
  104. def AddTelecasts():
  105.     addWindow = tkinter.Tk()
  106.     addWindow.geometry('225x250')
  107.     addWindow.title("Add")
  108.     Center(addWindow)
  109.     global nameEntryBox, durationEntryBox, averageMarkEntryBox
  110.     nameLabel = tkinter.Label(addWindow, text='Enter a name')
  111.     nameLabel.pack(side=tkinter.TOP)
  112.     nameEntryBox = tkinter.Entry(addWindow)
  113.     nameEntryBox.focus_set()
  114.     nameEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
  115.     # 2
  116.     durationLabel = tkinter.Label(addWindow, text='Enter a duration')
  117.     durationLabel.pack(side=tkinter.TOP)
  118.     durationEntryBox = tkinter.Entry(addWindow)
  119.     durationEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
  120.     # 3
  121.     countAverageMarkLabel = tkinter.Label(addWindow, text='Enter a average mark')
  122.     countAverageMarkLabel.pack(side=tkinter.TOP)
  123.     averageMarkEntryBox = tkinter.Entry(addWindow)
  124.     averageMarkEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
  125.  
  126.     mySubmitButton = tkinter.Button(addWindow, text='Add', height=1, width=16, command=AddItem)
  127.     mySubmitButton.pack()
  128.  
  129.  
  130. def AddItem():
  131.     print(nameEntryBox.get())
  132.     print(durationEntryBox.get())
  133.     print(averageMarkEntryBox.get())
  134.     arrayStatement.append(
  135.         Statement(len(arrayStatement) + 1, nameEntryBox.get(), int(durationEntryBox.get()), float(averageMarkEntryBox.get())))
  136.     screen.LoadTable(arrayStatement)
  137.  
  138.  
  139.  
  140.  
  141.  
  142. def Replace():
  143.     insertWindow = tkinter.Tk()
  144.     insertWindow.geometry('225x290')
  145.     insertWindow.title("Insert")
  146.     Center(insertWindow)
  147.     global indexEntryBox, CreateEntryBox, NameEntryBox, ExpensesEntryBox
  148.  
  149.     indexLabel = tkinter.Label(insertWindow, text='Replace index [1-' + str(len(arrayStatement)) + ']')
  150.     indexLabel.pack(side=tkinter.TOP)
  151.     indexEntryBox = tkinter.Entry(insertWindow)
  152.     indexEntryBox.focus_set()
  153.     indexEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
  154.  
  155.     CreateLabel = tkinter.Label(insertWindow, text='Enter a Create')
  156.     CreateLabel.pack(side=tkinter.TOP)
  157.     CreateEntryBox = tkinter.Entry(insertWindow)
  158.     CreateEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
  159.  
  160.     NameLabel = tkinter.Label(insertWindow, text='Enter a Name')
  161.     NameLabel.pack(side=tkinter.TOP)
  162.     NameEntryBox = tkinter.Entry(insertWindow)
  163.     NameEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
  164.  
  165.     countExpensesLabel = tkinter.Label(insertWindow, text='Enter a Expensess')
  166.     countExpensesLabel.pack(side=tkinter.TOP)
  167.     ExpensesEntryBox = tkinter.Entry(insertWindow)
  168.     ExpensesEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
  169.  
  170.     mySubmitButton = tkinter.Button(insertWindow, text='Replace', height=1, width=16, command=ReplaceItem)
  171.     mySubmitButton.pack()
  172.  
  173.  
  174. def ReplaceItem():
  175.     print(indexEntryBox.get())
  176.     print(CreateEntryBox.get())
  177.     print(NameEntryBox.get())
  178.     print(ExpensesEntryBox.get())
  179.     if (0 <= int(indexEntryBox.get())-1 < len(arrayStatement)):
  180.         array = []
  181.         for i in range(len(arrayStatement)):
  182.             if i != int(indexEntryBox.get())-1:
  183.                 arrayStatement[i] = arrayStatement[i]
  184.             else:
  185.                 arrayStatement[i] = Statement(int(indexEntryBox.get()), int(CreateEntryBox.get()), NameEntryBox.get(),
  186.                                     ExpensesEntryBox.get())
  187.  
  188.         for i in range(len(arrayStatement)):
  189.             arrayStatement[i].setId(i + 1)
  190.         screen.LoadTable(arrayStatement)
  191.     else:
  192.         print('Invalid index')
  193.  
  194.  
  195.  
  196.  
  197. # ---2.8
  198. def SortTelecasts():
  199.     sortWindow = tkinter.Tk()
  200.     sortWindow.geometry('225x250')
  201.     sortWindow.title("Sort")
  202.     Center(sortWindow)
  203.     global indexFromEntryBox, indexToEntryBox, variableSortBy, variableSortReverse
  204.     # from
  205.     indexFromLabel = tkinter.Label(sortWindow, text='Index from [1-' + str(len(arrayStatement)) + ']')
  206.     indexFromLabel.pack(side=tkinter.TOP)
  207.     indexFromEntryBox = tkinter.Entry(sortWindow)
  208.     indexFromEntryBox.focus_set()
  209.     indexFromEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
  210.     # to
  211.     indexToLabel = tkinter.Label(sortWindow, text='Index to [1-' + str(len(arrayStatement)) + ']')
  212.     indexToLabel.pack(side=tkinter.TOP)
  213.     indexToEntryBox = tkinter.Entry(sortWindow)
  214.     indexToEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
  215.     # sortBy
  216.     sortByLabel = tkinter.Label(sortWindow, text='Sort by')
  217.     sortByLabel.pack(side=tkinter.TOP)
  218.     variableSortBy = tkinter.StringVar(sortWindow)
  219.     variableSortBy.set("Id")  # default value
  220.     sortOptionMenu = tkinter.OptionMenu(sortWindow, variableSortBy, "Id", "name", "duration", "Average Mark")
  221.     sortOptionMenu.pack(side=tkinter.TOP)
  222.     # reverse
  223.     reverseLabel = tkinter.Label(sortWindow, text='Reverse sort')
  224.     reverseLabel.pack(side=tkinter.TOP)
  225.     variableSortReverse = tkinter.IntVar(sortWindow)
  226.     variableSortReverse.set(0)  # default value
  227.     checkbutton = tkinter.Checkbutton(sortWindow, variable=variableSortReverse)
  228.     checkbutton.pack(side=tkinter.TOP)
  229.     # button
  230.     mySubmitButton = tkinter.Button(sortWindow, text='Sort', height=1, width=16, command=SortItem)
  231.     mySubmitButton.pack()
  232.  
  233.  
  234. def SortItem():
  235.     global arrayStatement
  236.     print(indexFromEntryBox.get())
  237.     print(indexToEntryBox.get())
  238.     print(variableSortBy.get())
  239.     print(variableSortReverse.get())
  240.     if ((0 <= int(indexFromEntryBox.get()) - 1 < len(arrayStatement))
  241.         and (0 <= int(indexToEntryBox.get()) - 1 < len(arrayStatement))
  242.         and (int(indexFromEntryBox.get()) - 1 < int(indexToEntryBox.get()) - 1)):
  243.  
  244.         global sortArrayTelecasts
  245.         sortArrayTelecasts = arrayStatement[int(indexFromEntryBox.get()) - 1:int(indexToEntryBox.get())]
  246.  
  247.         if (variableSortBy.get() == 'Id'):
  248.             sortArrayTelecasts = sorted(sortArrayTelecasts, key=lambda x: x.getId(), reverse=variableSortReverse.get())
  249.         elif (variableSortBy.get() == 'name'):
  250.             sortArrayTelecasts = sorted(sortArrayTelecasts, key=lambda x: x.getname().lower(), reverse=variableSortReverse.get())
  251.         elif (variableSortBy.get() == 'duration'):
  252.             sortArrayTelecasts = sorted(sortArrayTelecasts, key=lambda x: x.getduration(), reverse=variableSortReverse.get())
  253.         elif (variableSortBy.get() == 'Average Mark'):
  254.             sortArrayTelecasts = sorted(sortArrayTelecasts, key=lambda x: x.getAverageMark(), reverse=variableSortReverse.get())
  255.  
  256.         for i in range(len(sortArrayTelecasts)):
  257.             print(sortArrayTelecasts[i].getname(), sortArrayTelecasts[i].getduration(), sortArrayTelecasts[i].getAverageMark())
  258.         screen.LoadTable(sortArrayTelecasts)
  259.  
  260.         averageIndex = math.floor(len(sortArrayTelecasts)/2)
  261.         AverageValue(averageIndex)
  262.     else:
  263.         print('Invalid index')
  264.  
  265. def AverageValue(averageIndex):
  266.     averageWindow = tkinter.Tk()
  267.     averageWindow.geometry('225x250')
  268.     averageWindow.title("Average value")
  269.     Center(averageWindow)
  270.     global nameEntryBox, durationEntryBox, averageMarkEntryBox
  271.     nameLabel = tkinter.Label(averageWindow, text=sortArrayTelecasts[averageIndex].getname())
  272.     nameLabel.pack(side=tkinter.TOP)
  273.     # 2
  274.     durationLabel = tkinter.Label(averageWindow, text=sortArrayTelecasts[averageIndex].getduration())
  275.     durationLabel.pack(side=tkinter.TOP)
  276.     # 3
  277.     countAverageMarkLabel = tkinter.Label(averageWindow, text=sortArrayTelecasts[averageIndex].getAverageMark())
  278.     countAverageMarkLabel.pack(side=tkinter.TOP)
  279.  
  280.     mySubmitButton = tkinter.Button(averageWindow, text='Ok', height=1, width=16, command=averageWindow.destroy)
  281.     mySubmitButton.pack()
  282.  
  283. class TableScreen(tkinter.Frame):
  284.     def __init__(self, parent):
  285.         ttk.Frame.__init__(self, parent)
  286.         if (tableIsCreated == 0):
  287.             self.CreateUI()
  288.         self.LoadTable(arrayStatement)
  289.         parent.grid_rowconfigure(0, weight=1)
  290.         parent.grid_columnconfigure(0, weight=1)
  291.  
  292.     def CreateUI(self):
  293.         tv = ttk.Treeview(self)
  294.         tv['columns'] = ('name', 'duration', 'averageMark')
  295.         tv.heading("#0", text='Id')
  296.         tv.column("#0", width=1)
  297.         tv.heading('name', text='name')
  298.         tv.column('name', anchor='center', width=100)
  299.         tv.heading('duration', text='duration')
  300.         tv.column('duration', anchor='center', width=100)
  301.         tv.heading('averageMark', text='Average Mark')
  302.         tv.column('averageMark', anchor='center', width=100)
  303.         tv.grid(sticky=(tkinter.N, tkinter.S, tkinter.W, tkinter.E))
  304.         self.treeview = tv
  305.         self.grid_rowconfigure(0, weight=1)
  306.         self.grid_columnconfigure(0, weight=1)
  307.         global tableIsCreated
  308.         tableIsCreated = 1
  309.  
  310.     def LoadTable(self, arr):
  311.         for i in self.treeview.get_children():
  312.             self.treeview.delete(i)
  313.         for i in range(len(arr)):
  314.             self.treeview.insert('', 'end', text=str(arr[i].getId()),
  315.                                  values=(arr[i].getname(), arr[i].getduration(), arr[i].getAverageMark()))
  316.  
  317.  
  318. def main():
  319.     global root, arrayStatement, tableIsCreated, screen
  320.     root = tkinter.Tk()
  321.     root.geometry('750x500')
  322.     root.title("Telecasts")
  323.  
  324.     arrayStatement = []
  325.     tableIsCreated = 0
  326.     screen = 0
  327.  
  328.     menubar = tkinter.Menu(root)
  329.  
  330.     filemenu = tkinter.Menu(menubar, tearoff=0)
  331.     filemenu.add_command(label="Open", command=OnOpen)
  332.     filemenu.add_command(label="Save", command=OnSave)
  333.     filemenu.add_separator()
  334.     filemenu.add_command(label="Exit", command=root.quit)
  335.  
  336.     editmenu = tkinter.Menu(menubar, tearoff=0)
  337.     editmenu.add_command(label="Add Telecasts", command=AddTelecasts)
  338.     # editmenu.add_command(label="Insert", command=InsertTelecasts)
  339.     editmenu.add_command(label="Replace", command=Replace)
  340.  
  341.     menubar.add_cascade(label="File", menu=filemenu)
  342.     menubar.add_cascade(label="Edit", menu=editmenu)
  343.     menubar.add_command(label="Sort", command=SortTelecasts)
  344.     root.config(menu=menubar)
  345.  
  346.     Center(root)
  347.     root.mainloop()
  348.  
  349.  
  350. if __name__ == "__main__":
  351.     main()
  352.  
  353.  
  354.  
  355. #database.txt
  356. Интер  30  4.5
  357. Один плюс один  45  4.0
  358. ICTV    40  4.6
  359. Сигма  120 5.0
  360. МТВ  90  3.5
  361. ТРК Украина   45  3.6
  362. ТВ-7  20  4.0
  363. Новый канал   10  4.7
Advertisement
Add Comment
Please, Sign In to add comment