Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import tkinter as tk
- from tkinter import ttk
- import sys
- import os
- class MyTree(ttk.Treeview):
- def __init__(self, *args, **kwargs):
- super().__init__(*args, **kwargs)
- # Элементам с тегом green назначить зеленый фон, элементам с тегом red назначить красный фон
- self.tag_configure('green', background='green')
- self.tag_configure('red', background='red')
- self.tag_configure('yellow', background='yellow')
- def insert(self, parent_node, index, **kwargs):
- '''Назначение тега при добавлении элемента в дерево'''
- item = super().insert(parent_node, index, **kwargs)
- values = kwargs.get('values', None)
- if values:
- if values[1]=="Сдана":
- super().item(item, tag='green')
- elif values[1]=="Просрочена":
- super().item(item, tag='red')
- elif values[1]=="На руках":
- super().item(item, tag='yellow')
- return item
- class Main(tk.Tk):
- def __init__(self,*args, **kwargs):
- tk.Tk.__init__(self,*args, **kwargs)
- def fixed_map(option):
- return [elm for elm in style.map('Treeview', query_opt=option) if elm[:2] != ('!disabled', '!selected')]
- style = ttk.Style(self)
- style.map('Treeview', foreground=fixed_map('foreground'), background=fixed_map('background'))
- self.title("Электронный читательский билет - Добавить книги в ЧБ")
- #Заголовок
- self.geometry("1000x450+300+200")#Размер
- self.resizable(False, False)#Изменение размера окна
- self.protocol("WM_DELETE_WINDOW", lambda: sys.exit())
- self.s = style
- self.s.theme_use('clam')
- self.frame = tk.Frame(self)
- self.frame.configure(background='gray60',width=1000,height=350)
- self.frame.pack()
- ttk.Style().configure("Treeview",fieldbackground="royalblue3")
- #Таблица
- self.table = MyTree(self.frame, columns=('DB','Class','litera','adr','phone'), height=16)
- self.table.column('#0', width=210, anchor=tk.CENTER)
- self.table.column('DB', width=210, anchor=tk.CENTER)
- self.table.column('Class', width=150, anchor=tk.CENTER)
- self.table.column('litera', width=30, anchor=tk.CENTER)
- self.table.column('phone', width=150, anchor=tk.CENTER)
- self.table.column('adr', width=230, anchor=tk.CENTER)
- self.table.heading('#0', text='ФИО / Книга')
- self.table.heading('DB', text='День рождения / Автор')
- self.table.heading('Class', text='Класс / Статус')
- self.table.heading('litera', text='Литера')
- self.table.heading('phone', text='Телефон')
- self.table.heading('adr', text='Адрес')
- self.table.pack(side='left')
- self.scroll = ttk.Scrollbar(self.frame, orient='vertical', command=self.table.yview)
- self.scroll.pack(side='right',fill='y')
- #Вывод всех учеников
- rows = FakeBase.get_students()
- for row in rows:
- lvl1 = self.table.insert("" , tk.END ,text=row[0], values=row[1:])
- row1 = row[0],row[1],row[4]
- books = FakeBase.get_books(*row1)
- for book in books:
- self.table.insert(lvl1, tk.END,text=book[0],values=book[1:])#По задумке тут должен меняться цвет(тут есть значения 'Сдана', 'На руках', 'Просрочена')
- class FakeBase:
- students = [
- ('Иванов Иван Иванович', '000000', '8', 'Б', '11111', 'Адрес 1'),
- ('Петров Игорь Семенович', '000000', '9', 'A', '22222', 'Адрес 2'),
- ('Еще Кто-То', '123456', '99', 'Й', '33333', 'Адрес 3')
- ]
- books = {
- ('Иванов Иван Иванович', '000000', '11111'): [('Книга 1', 'Пушкин', 'Сдана')],
- ('Петров Игорь Семенович', '000000', '22222'): [('Книга 2', 'Пушкин', 'На руках')],
- ('Еще Кто-То', '123456', '33333'): [('Книга 3', 'Толстой', 'Просрочена')],
- }
- @classmethod
- def get_students(cls):
- return cls.students
- @classmethod
- def get_books(cls, fio, birthday, phone):
- return cls.books.get((fio, birthday, phone), [])
- if __name__ == "__main__":
- app = Main()
- app.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement