Advertisement
Guest User

Untitled

a guest
Jan 13th, 2020
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.59 KB | None | 0 0
  1. from tkinter import *
  2. import tkinter as tk
  3. from tkinter import ttk
  4. from tkinter import scrolledtext
  5. import sqlite3
  6. import time
  7. import threading
  8.  
  9. class Main(tk.Frame):
  10.     def __init__(self, root):
  11.         super().__init__(root)        
  12.         self.init_main()
  13.         self.db = db
  14.         self.view_records()
  15.         self.flag = False
  16.        
  17.  
  18.     def init_main(self):
  19.         toolbar = tk.Frame(bg='#d7d8e0')
  20.         toolbar.pack(side=tk.TOP, fill=tk.X)
  21.         mainmenu = Menu(root)
  22.         root.config(menu=mainmenu)
  23.         self.add_img = tk.PhotoImage(file='add.png')
  24.         btn_open_dialog = tk.Button(toolbar, text='Отправить заявку', command=self.open_dialog, bg='#d7d8e0', bd=0, compound=tk.TOP, image=self.add_img)
  25.         btn_open_dialog.pack(side=tk.LEFT)
  26.         self.update_img = tk.PhotoImage(file='update.png')
  27.         btn_edit_dialog = tk.Button(toolbar, text='Редактировать', bg='#d7d8e0', bd=0, image=self.update_img, compound=tk.TOP, command=self.open_update_dialog)
  28.         btn_edit_dialog.pack(side=tk.LEFT)
  29.         self.delete_img = tk.PhotoImage(file='delete.png')
  30.         btn_delete = tk.Button(toolbar, text='Удалить заявку', bg='#d7d8e0', bd=0, image=self.delete_img, compound=tk.TOP, command=self.delete_records)
  31.         btn_delete.pack(side=tk.LEFT)
  32.         self.refrash_img = tk.PhotoImage(file='refrash.png')
  33.         btn_ref = tk.Button(toolbar, text='Автообновление', bg='#d7d8e0', bd=0, image=self.refrash_img, compound=tk.TOP, command=self.start_autorefrash)
  34.         btn_ref.pack(side=tk.LEFT)
  35.         label_info = tk.Label(toolbar, text='Тел: 62-20-42 (Влад, Никита)', font=('Arial Bold', 18), bg='#d7d8e0')
  36.         label_info.pack(side=tk.LEFT)        
  37.         btn_delete = tk.Button(toolbar, text='Обновить', bg='#d7d8e0', bd=0, compound=tk.TOP, command=self.refrash, image=self.refrash_img)
  38.         btn_delete.pack(side=tk.RIGHT)
  39.         self.tree = ttk.Treeview(self, columns=('id', 'description', 'kabinet', 'data'), height=15, show='headings')
  40.         self.tree.column('id', width=30, )
  41.         self.tree.column('description', width=500, )
  42.         self.tree.column('kabinet', width=100, )
  43.         self.tree.column('data', width=150, )
  44.         self.tree.heading('id', text='id')
  45.         self.tree.heading('description', text='Текст обращения')
  46.         self.tree.heading('kabinet', text='№ Кабинета')
  47.         self.tree.heading('data', text='Время записи')
  48.         self.tree.pack()
  49.  
  50.     def records(self, description, kabinet, data):
  51.         self.db.insert_data(description, kabinet, data)
  52.         self.view_records()
  53.  
  54.     def update_record(self, description, kabinet, data):
  55.         self.db.c.execute('''UPDATE tiket SET description=?, kabinet=?, data=? WHERE id=?''', (description, kabinet, data, self.tree.set(self.tree.selection()[0], '#1'),))
  56.         self.db.conn.commit()
  57.         self.view_records()
  58.  
  59.     def start_autorefrash(self):
  60.         t1 = threading.Thread(target=self.autorefrash)
  61.         t1.start()
  62.  
  63.  
  64.     def autorefrash(self):
  65.         db = DB()
  66.         self.flag = not self.flag
  67.         while True:
  68.             if self.flag:
  69.                 db.c.execute('''SELECT * FROM tiket''')
  70.                 [self.tree.delete(i) for i in self.tree.get_children()]
  71.                 [self.tree.insert('', 'end', values=row) for row in db.c.fetchall()]
  72.                 time.sleep(10)
  73.             else:
  74.                 break
  75.  
  76.        
  77.     def refrash(self):
  78.         self.db.c.execute('''SELECT * FROM tiket''')
  79.         self.db.conn.commit()
  80.         self.view_records()
  81.  
  82.  
  83.     def view_records(self):
  84.         self.db.c.execute('''SELECT * FROM tiket''')
  85.         [self.tree.delete(i) for i in self.tree.get_children()]
  86.         [self.tree.insert('', 'end', values=row) for row in self.db.c.fetchall()]
  87.    
  88.     def delete_records(self):
  89.         for selection_item in self.tree.selection():
  90.             self.db.c.execute('''DELETE FROM tiket WHERE id=?''', (self.tree.set(selection_item, '#1'),))
  91.         self.db.conn.commit()
  92.         self.view_records()
  93.     def open_dialog(self):
  94.         Child()
  95.     def open_update_dialog(self):
  96.         Update()
  97.  
  98. class Child(tk.Toplevel):
  99.     def __init__(self):
  100.         super().__init__(root)
  101.         self.init_child()
  102.         self.view = app
  103.  
  104.     def init_child(self):
  105.         self.title('Создание обращения')
  106.         self.geometry('700x300')
  107.         label_description = tk.Label(self, text='Описание проблемы:')
  108.         label_description.place(x=50, y=50)
  109.         label_kabinet = tk.Label(self, text='Кабинет:')
  110.         label_kabinet.place(x=50, y=170)
  111.         self.entry_description = scrolledtext.ScrolledText(self)
  112.         self.entry_description.place(x=200, y=50, width=400, height=100)
  113.         self.entry_kabinet = ttk.Entry(self)
  114.         self.entry_kabinet.place(x=200, y=170)
  115.         btn_cancel = ttk.Button(self, text='Закрыть', command=self.destroy)
  116.         btn_cancel.place(x=300, y=200)
  117.         self.btn_ok = ttk.Button(self, text='Отправить',command=self.destroy)
  118.         self.btn_ok.place(x=220, y=200)
  119.         self.btn_ok.bind('<Button-1>', lambda event: self.view.records(self.entry_description.get(1.0, 300.0),self.entry_kabinet.get(),time.strftime('%d-%m-%Y-%H:%M:%S')))
  120.         self.grab_set()
  121.         self.focus_set()
  122.  
  123.  
  124. class Update(Child):
  125.     def __init__(self):
  126.         super().__init__()
  127.         self.init_edit()
  128.         self.view = app
  129.     def init_edit(self):
  130.         self.title('Редактировать')
  131.         btn_edit = ttk.Button(self, text='Редактировать')
  132.         btn_edit.place(x=200, y=200)
  133.         btn_edit.bind('<Button-1>', lambda event: self.view.update_record(self.entry_description.get(1.0, 300.0),self.entry_kabinet.get(),time.strftime('%d-%m-%Y-%H:%M:%S')))
  134.         self.btn_ok.destroy()
  135.  
  136.  
  137. class DB:
  138.     def __init__(self):
  139.         self.conn = sqlite3.connect('database2.db')
  140.         self.c = self.conn.cursor()
  141.         self.c.execute('''CREATE TABLE IF NOT EXISTS tiket (id integer primary key, description text, kabinet text, data TIME)''')
  142.         self.conn.commit()
  143.     def insert_data(self, description, kabinet, data):
  144.         self.c.execute('''INSERT INTO tiket (description, kabinet, data) VALUES (?, ?, ?)''', (description, kabinet, data))
  145.         self.conn.commit()
  146.  
  147. if __name__ == '__main__':
  148.     root = tk.Tk()
  149.     db = DB()
  150.     app = Main(root)
  151.     app.pack()
  152.     root.title('Тикеты на обращение')
  153.     root.geometry('1000x400')    
  154.     root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement