Advertisement
Guest User

Untitled

a guest
Feb 18th, 2020
135
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.67 KB | None
  1. import tkinter as tk
  2. from tkinter import ttk
  3. import sys
  4. import os
  5.  
  6. class MyTree(ttk.Treeview):
  7.     def __init__(self, *args, **kwargs):
  8.         super().__init__(*args, **kwargs)
  9.  
  10.         # Элементам с тегом green назначить зеленый фон, элементам с тегом red назначить красный фон
  11.         self.tag_configure('green', background='green')
  12.         self.tag_configure('red', background='red')
  13.         self.tag_configure('yellow', background='yellow')
  14.  
  15.     def insert(self, parent_node, index, **kwargs):
  16.         '''Назначение тега при добавлении элемента в дерево'''
  17.  
  18.         item = super().insert(parent_node, index, **kwargs)
  19.  
  20.         values = kwargs.get('values', None)
  21.  
  22.         if values:
  23.             if values[1]=="Сдана":
  24.                 super().item(item, tag='green')
  25.             elif values[1]=="Просрочена":
  26.                 super().item(item, tag='red')
  27.             elif values[1]=="На руках":
  28.                 super().item(item, tag='yellow')
  29.  
  30.         return item
  31.  
  32. class Main(tk.Tk):
  33.  
  34.     def __init__(self,*args, **kwargs):
  35.         tk.Tk.__init__(self,*args, **kwargs)
  36.  
  37.         def fixed_map(option):
  38.             return [elm for elm in style.map('Treeview', query_opt=option) if elm[:2] != ('!disabled', '!selected')]
  39.  
  40.         style = ttk.Style(self)
  41.         style.map('Treeview', foreground=fixed_map('foreground'), background=fixed_map('background'))
  42.  
  43.         self.title("Электронный читательский билет - Добавить книги в ЧБ")
  44.         #Заголовок
  45.         self.geometry("1000x450+300+200")#Размер
  46.         self.resizable(False, False)#Изменение размера окна
  47.         self.protocol("WM_DELETE_WINDOW", lambda: sys.exit())
  48.  
  49.         self.s = style
  50.         self.s.theme_use('clam')
  51.         self.frame = tk.Frame(self)
  52.         self.frame.configure(background='gray60',width=1000,height=350)
  53.         self.frame.pack()
  54.  
  55.         ttk.Style().configure("Treeview",fieldbackground="royalblue3")
  56.  
  57.         #Таблица
  58.         self.table = MyTree(self.frame, columns=('DB','Class','litera','adr','phone'), height=16)
  59.         self.table.column('#0', width=210, anchor=tk.CENTER)
  60.         self.table.column('DB', width=210, anchor=tk.CENTER)
  61.         self.table.column('Class', width=150, anchor=tk.CENTER)
  62.         self.table.column('litera', width=30, anchor=tk.CENTER)
  63.         self.table.column('phone', width=150, anchor=tk.CENTER)
  64.         self.table.column('adr', width=230, anchor=tk.CENTER)
  65.  
  66.         self.table.heading('#0', text='ФИО / Книга')
  67.         self.table.heading('DB', text='День рождения / Автор')
  68.         self.table.heading('Class', text='Класс / Статус')
  69.         self.table.heading('litera', text='Литера')
  70.         self.table.heading('phone', text='Телефон')
  71.         self.table.heading('adr', text='Адрес')
  72.  
  73.         self.table.pack(side='left')
  74.  
  75.         self.scroll = ttk.Scrollbar(self.frame, orient='vertical', command=self.table.yview)
  76.         self.scroll.pack(side='right',fill='y')
  77.  
  78.         #Вывод всех учеников
  79.         rows = FakeBase.get_students()
  80.         for row in rows:
  81.             lvl1 = self.table.insert("" , tk.END ,text=row[0], values=row[1:])
  82.             row1 = row[0],row[1],row[4]
  83.             books = FakeBase.get_books(*row1)
  84.             for book in books:
  85.                 self.table.insert(lvl1, tk.END,text=book[0],values=book[1:])#По задумке тут должен меняться цвет(тут есть значения 'Сдана', 'На руках', 'Просрочена')
  86.  
  87.  
  88. class FakeBase:
  89.     students = [
  90.         ('Иванов Иван Иванович', '000000', '8', 'Б', '11111', 'Адрес 1'),
  91.         ('Петров Игорь Семенович', '000000', '9', 'A', '22222', 'Адрес 2'),
  92.         ('Еще Кто-То', '123456', '99', 'Й', '33333', 'Адрес 3')
  93.     ]
  94.  
  95.     books = {
  96.         ('Иванов Иван Иванович', '000000', '11111'): [('Книга 1', 'Пушкин', 'Сдана')],
  97.         ('Петров Игорь Семенович', '000000', '22222'): [('Книга 2', 'Пушкин', 'На руках')],
  98.         ('Еще Кто-То', '123456', '33333'): [('Книга 3', 'Толстой', 'Просрочена')],
  99.     }
  100.  
  101.     @classmethod
  102.     def get_students(cls):
  103.         return cls.students
  104.  
  105.     @classmethod
  106.     def get_books(cls, fio, birthday, phone):
  107.         return cls.books.get((fio, birthday, phone), [])
  108.  
  109.  
  110. if __name__ == "__main__":
  111.     app = Main()
  112.     app.mainloop()
Advertisement
RAW Paste Data Copied
Advertisement