Xom9ik

Course_work/5var (IV semester) .py

May 5th, 2018
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 12.11 KB | None | 0 0
  1. Course_work/5var (IV semester) .py
  2. import tkinter
  3. import tkinter.ttk as ttk
  4. import tkinter.filedialog
  5.  
  6.  
  7. class Monuments:
  8.     def __init__(self, id, create, name, expenses):
  9.         self.id = id
  10.         self.create = create
  11.         self.name = name
  12.         self.expenses = expenses
  13.  
  14.     def setId(self, id):
  15.         self.id = id
  16.  
  17.     def getId(self):
  18.         return self.id
  19.  
  20.     def setCreate(self, create):
  21.         self.create = create
  22.  
  23.     def getCreate(self):
  24.         return self.create
  25.  
  26.     def setName(self, name):
  27.         self.name = name
  28.  
  29.     def getName(self):
  30.         return self.name
  31.  
  32.     def setExpenses(self, expenses):
  33.         self.expenses = expenses
  34.  
  35.     def getExpenses(self):
  36.         return self.expenses
  37.  
  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.     f1 = dlg.show()
  53.     if f1 != '':
  54.         print(f1)
  55.         ReadFileText(f1)
  56.  
  57.  
  58. def OnSave():
  59.     file = open(path, 'w')
  60.     result = ''
  61.     for i in range(0, len(arrayMonuments)):
  62.         if (i < len(arrayMonuments) - 1):
  63.             result += str(arrayMonuments[i].getCreate()) + '\t' + str(arrayMonuments[i].getName()) + '\t'+ str(arrayMonuments[i].getExpenses()) + '\n'
  64.         else:
  65.             result += str(arrayMonuments[i].getCreate()) + '\t' + str(arrayMonuments[i].getName()) + '\t'+ str(arrayMonuments[i].getExpenses())
  66.         print(arrayMonuments[i].getExpenses())
  67.     file.write(result)
  68.     file.close()
  69.  
  70.  
  71. def ReadFileText(arg):
  72.     global path, screen, root, arrayMonuments
  73.     path = arg
  74.     file = open(path, 'rt')
  75.     inputFile = []
  76.     arrayMonuments = []
  77.  
  78.     for line in file:
  79.         row = [i for i in line.split('\t')]
  80.         inputFile.append(row)
  81.     countId = 0
  82.     for line in inputFile:
  83.         countId += 1
  84.         arrayMonuments.append(Monuments(countId, int(line[0]), line[1], int(line[2].replace("\n", ""))))
  85.  
  86.     for i in range(0, len(arrayMonuments)):
  87.         print(arrayMonuments[i].getCreate())
  88.  
  89.     if (screen == 0):
  90.         screen = TableScreen(root)
  91.         screen.pack(side="top", fill="both", expand=True)
  92.     screen.LoadTable(arrayMonuments)
  93.     file.close()
  94.  
  95.  
  96. def AddCD():
  97.     addWindow = tkinter.Tk()
  98.     addWindow.geometry('225x250')
  99.     addWindow.title("Add")
  100.     Center(addWindow)
  101.     global createEntryBox, nameEntryBox, expensesEntryBox
  102.     createLabel = tkinter.Label(addWindow, text='Enter a year create')
  103.     createLabel.pack(side=tkinter.TOP)
  104.     createEntryBox = tkinter.Entry(addWindow)
  105.     createEntryBox.focus_set()
  106.     createEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
  107.     # 2
  108.     nameLabel = tkinter.Label(addWindow, text='Enter a name')
  109.     nameLabel.pack(side=tkinter.TOP)
  110.     nameEntryBox = tkinter.Entry(addWindow)
  111.     nameEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
  112.     # 3
  113.     countexpensesLabel = tkinter.Label(addWindow, text='Enter a coin')
  114.     countexpensesLabel.pack(side=tkinter.TOP)
  115.     expensesEntryBox = tkinter.Entry(addWindow)
  116.     expensesEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
  117.  
  118.     mySubmitButton = tkinter.Button(addWindow, text='Add', height=1, width=16, command=AddItem)
  119.     mySubmitButton.pack()
  120.  
  121.  
  122. def AddItem():
  123.     print(createEntryBox.get())
  124.     print(nameEntryBox.get())
  125.     print(expensesEntryBox.get())
  126.     arrayMonuments.append(
  127.         Monuments(len(arrayMonuments) + 1, int(createEntryBox.get()), nameEntryBox.get(),
  128.                   int(expensesEntryBox.get())))
  129.     screen.LoadTable(arrayMonuments)
  130.  
  131.  
  132. def InsertBefore():
  133.     insertWindow = tkinter.Tk()
  134.     insertWindow.geometry('225x290')
  135.     insertWindow.title("Insert")
  136.     Center(insertWindow)
  137.     global indexEntryBox, CreateEntryBox, NameEntryBox, ExpensesEntryBox
  138.  
  139.     indexLabel = tkinter.Label(insertWindow, text='Insert before index [1-' + str(len(arrayMonuments)) + ']')
  140.     indexLabel.pack(side=tkinter.TOP)
  141.     indexEntryBox = tkinter.Entry(insertWindow)
  142.     indexEntryBox.focus_set()
  143.     indexEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
  144.  
  145.     CreateLabel = tkinter.Label(insertWindow, text='Enter a Create')
  146.     CreateLabel.pack(side=tkinter.TOP)
  147.     CreateEntryBox = tkinter.Entry(insertWindow)
  148.     CreateEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
  149.  
  150.     NameLabel = tkinter.Label(insertWindow, text='Enter a Name')
  151.     NameLabel.pack(side=tkinter.TOP)
  152.     NameEntryBox = tkinter.Entry(insertWindow)
  153.     NameEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
  154.  
  155.     countExpensesLabel = tkinter.Label(insertWindow, text='Enter a Expensess')
  156.     countExpensesLabel.pack(side=tkinter.TOP)
  157.     ExpensesEntryBox = tkinter.Entry(insertWindow)
  158.     ExpensesEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
  159.  
  160.     mySubmitButton = tkinter.Button(insertWindow, text='Insert before', height=1, width=16, command=InsertItemBefore)
  161.     mySubmitButton.pack()
  162.  
  163.  
  164. def InsertItemBefore():
  165.     print(indexEntryBox.get())
  166.     print(CreateEntryBox.get())
  167.     print(NameEntryBox.get())
  168.     print(ExpensesEntryBox.get())
  169.     if (0 <= int(indexEntryBox.get()) - 1 < len(arrayMonuments)):
  170.         arrayMonuments.insert(int(indexEntryBox.get()) - 1,
  171.                               Monuments(int(indexEntryBox.get()), int(CreateEntryBox.get()), NameEntryBox.get(),
  172.                                     ExpensesEntryBox.get()))
  173.         for i in range(len(arrayMonuments)):
  174.             arrayMonuments[i].setId(i + 1)
  175.         screen.LoadTable(arrayMonuments)
  176.     else:
  177.         print('Invalid index')
  178.  
  179. def InsertAfter():
  180.     insertWindow = tkinter.Tk()
  181.     insertWindow.geometry('225x290')
  182.     insertWindow.title("Insert")
  183.     Center(insertWindow)
  184.     global indexEntryBox, CreateEntryBox, NameEntryBox, ExpensesEntryBox
  185.  
  186.     indexLabel = tkinter.Label(insertWindow, text='Insert after index [1-' + str(len(arrayMonuments)) + ']')
  187.     indexLabel.pack(side=tkinter.TOP)
  188.     indexEntryBox = tkinter.Entry(insertWindow)
  189.     indexEntryBox.focus_set()
  190.     indexEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
  191.  
  192.     CreateLabel = tkinter.Label(insertWindow, text='Enter a Create')
  193.     CreateLabel.pack(side=tkinter.TOP)
  194.     CreateEntryBox = tkinter.Entry(insertWindow)
  195.     CreateEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
  196.  
  197.     NameLabel = tkinter.Label(insertWindow, text='Enter a Name')
  198.     NameLabel.pack(side=tkinter.TOP)
  199.     NameEntryBox = tkinter.Entry(insertWindow)
  200.     NameEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
  201.  
  202.     countExpensesLabel = tkinter.Label(insertWindow, text='Enter a Expensess')
  203.     countExpensesLabel.pack(side=tkinter.TOP)
  204.     ExpensesEntryBox = tkinter.Entry(insertWindow)
  205.     ExpensesEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
  206.  
  207.     mySubmitButton = tkinter.Button(insertWindow, text='Insert after', height=1, width=16, command=InsertItemAfter)
  208.     mySubmitButton.pack()
  209.  
  210.  
  211. def InsertItemAfter():
  212.     print(indexEntryBox.get())
  213.     print(CreateEntryBox.get())
  214.     print(NameEntryBox.get())
  215.     print(ExpensesEntryBox.get())
  216.     if (0 <= int(indexEntryBox.get())-1 < len(arrayMonuments)):
  217.         arrayMonuments.insert(int(indexEntryBox.get()),
  218.                               Monuments(int(indexEntryBox.get()), int(CreateEntryBox.get()), NameEntryBox.get(),
  219.                                     ExpensesEntryBox.get()))
  220.         for i in range(len(arrayMonuments)):
  221.             arrayMonuments[i].setId(i + 1)
  222.         screen.LoadTable(arrayMonuments)
  223.     else:
  224.         print('Invalid index')
  225.  
  226. def Replace():
  227.     insertWindow = tkinter.Tk()
  228.     insertWindow.geometry('225x290')
  229.     insertWindow.title("Insert")
  230.     Center(insertWindow)
  231.     global indexEntryBox, CreateEntryBox, NameEntryBox, ExpensesEntryBox
  232.  
  233.     indexLabel = tkinter.Label(insertWindow, text='Replace index [1-' + str(len(arrayMonuments)) + ']')
  234.     indexLabel.pack(side=tkinter.TOP)
  235.     indexEntryBox = tkinter.Entry(insertWindow)
  236.     indexEntryBox.focus_set()
  237.     indexEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
  238.  
  239.     CreateLabel = tkinter.Label(insertWindow, text='Enter a Create')
  240.     CreateLabel.pack(side=tkinter.TOP)
  241.     CreateEntryBox = tkinter.Entry(insertWindow)
  242.     CreateEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
  243.  
  244.     NameLabel = tkinter.Label(insertWindow, text='Enter a Name')
  245.     NameLabel.pack(side=tkinter.TOP)
  246.     NameEntryBox = tkinter.Entry(insertWindow)
  247.     NameEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
  248.  
  249.     countExpensesLabel = tkinter.Label(insertWindow, text='Enter a Expensess')
  250.     countExpensesLabel.pack(side=tkinter.TOP)
  251.     ExpensesEntryBox = tkinter.Entry(insertWindow)
  252.     ExpensesEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
  253.  
  254.     mySubmitButton = tkinter.Button(insertWindow, text='Replace', height=1, width=16, command=ReplaceItem)
  255.     mySubmitButton.pack()
  256.  
  257.  
  258. def ReplaceItem():
  259.     print(indexEntryBox.get())
  260.     print(CreateEntryBox.get())
  261.     print(NameEntryBox.get())
  262.     print(ExpensesEntryBox.get())
  263.     if (0 <= int(indexEntryBox.get())-1 < len(arrayMonuments)):
  264.         array = []
  265.         for i in range(len(arrayMonuments)):
  266.             if i != int(indexEntryBox.get())-1:
  267.                 arrayMonuments[i] = arrayMonuments[i]
  268.             else:
  269.                 arrayMonuments[i] = Monuments(int(indexEntryBox.get()), int(CreateEntryBox.get()), NameEntryBox.get(),
  270.                                     ExpensesEntryBox.get())
  271.  
  272.         for i in range(len(arrayMonuments)):
  273.             arrayMonuments[i].setId(i + 1)
  274.         screen.LoadTable(arrayMonuments)
  275.     else:
  276.         print('Invalid index')
  277.  
  278. class TableScreen(tkinter.Frame):
  279.     def __init__(self, parent):
  280.         ttk.Frame.__init__(self, parent)
  281.         if (tableIsCreated == 0):
  282.             self.CreateUI()
  283.         self.LoadTable(arrayMonuments)
  284.         parent.grid_rowconfigure(0, weight=1)
  285.         parent.grid_columnconfigure(0, weight=1)
  286.  
  287.     def CreateUI(self):
  288.         tv = ttk.Treeview(self)
  289.         tv['columns'] = ('Create', 'Name', 'Expenses')
  290.         tv.heading("#0", text='Id')
  291.         tv.column("#0", width=1)
  292.         tv.heading('Create', text='Create')
  293.         tv.column('Create', anchor='center', width=100)
  294.         tv.heading('Name', text='Name')
  295.         tv.column('Name', anchor='center', width=100)
  296.         tv.heading('Expenses', text='Expenses')
  297.         tv.column('Expenses', anchor='center', width=100)
  298.         tv.grid(sticky=(tkinter.N, tkinter.S, tkinter.W, tkinter.E))
  299.         self.treeview = tv
  300.         self.grid_rowconfigure(0, weight=1)
  301.         self.grid_columnconfigure(0, weight=1)
  302.         global tableIsCreated
  303.         tableIsCreated = 1
  304.  
  305.     def LoadTable(self, arr):
  306.         for i in self.treeview.get_children():
  307.             self.treeview.delete(i)
  308.         for i in range(len(arr)):
  309.             self.treeview.insert('', 'end', text=str(arr[i].getId()),
  310.                                  values=(arr[i].getCreate(), arr[i].getName(), arr[i].getExpenses()))
  311.  
  312.  
  313. def main():
  314.     global root, arrayMonuments, tableIsCreated, screen
  315.     root = tkinter.Tk()
  316.     root.geometry('750x500')
  317.     root.title("Monuments")
  318.  
  319.     arrayMonuments = []
  320.     tableIsCreated = 0
  321.     screen = 0
  322.  
  323.     menubar = tkinter.Menu(root)
  324.  
  325.     filemenu = tkinter.Menu(menubar, tearoff=0)
  326.     filemenu.add_command(label="Open", command=OnOpen)
  327.     filemenu.add_command(label="Save", command=OnSave)
  328.     filemenu.add_separator()
  329.     filemenu.add_command(label="Exit", command=root.quit)
  330.  
  331.     editmenu = tkinter.Menu(menubar, tearoff=0)
  332.     editmenu.add_command(label="Add", command=AddCD)
  333.     editmenu.add_command(label="Insert before", command=InsertBefore)
  334.     editmenu.add_command(label="Insert after", command=InsertAfter)
  335.     editmenu.add_command(label="Replace", command=Replace)
  336.  
  337.     menubar.add_cascade(label="File", menu=filemenu)
  338.     menubar.add_cascade(label="Edit", menu=editmenu)
  339.     root.config(menu=menubar)
  340.  
  341.     Center(root)
  342.     root.mainloop()
  343.  
  344.  
  345. if __name__ == "__main__":
  346.     main()
Add Comment
Please, Sign In to add comment