Как окрасить значение в таблице treeview, в зависимости от этого значения? Python 3.9

Нужно окрасить значение KD в таблице(Если KD>1 - в зеленый, KD<1 - В красный)

def init_child(self):
    self.title('Calculator')
    self.geometry('400x390+400+300')
    self.resizable(False, False)

    label_NAME = tk.Label(self, text='Your NAME')
    label_NAME.place(x=50, y=20)
    label_KD = tk.Label(self, text='Your KD')
    label_KD.place(x=50, y=50)
    label_Kills = tk.Label(self, text='Qty of kills')
    label_Kills.place(x=50, y=80)
    label_CLUTCHES = tk.Label(self, text='Qty of Clutches')
    label_CLUTCHES.place(x=50, y=110)
    label_UD = tk.Label(self, text='Your UTILITY_DAMAGE')
    label_UD.place(x=50, y=140)
    label_OP = tk.Label(self, text='Qty of OPEN KILLS')
    label_OP.place(x=50, y=170)
    label_R = tk.Label(self, text='Your RATING 2.0')
    label_R.place(x=50, y=200)
    label_a = tk.Label(self, text='Adequate teammates(yes or no)')
    label_a.place(x=50, y=230)
    label_PP = tk.Label(self, text='PlusPoints')
    label_PP.place(x=50, y=260)
    label_a = tk.Label(self, text='Today date')
    label_a.place(x=50, y=290)

    btn_cancel = ttk.Button(self, text='CLOSE', command=self.destroy)
    btn_cancel.place(x=225, y=320)

    btn_submit = ttk.Button(self, text='SUBMIT')
    btn_submit.place(x=225, y=350)
    btn_submit.bind('<Button-1>', lambda event: self.view.records(self.entry_NAME.get(),
                                                                  self.entry_KD.get(),
                                                                  self.entry_Kills.get(),
                                                                  self.entry_CLUTCHES.get(),
                                                                  self.entry_UD.get(),
                                                                  self.entry_OP.get(),
                                                                  self.entry_R.get(),
                                                                  self.entry_DATE.get(),
                                                                  self.entry_PP.get(),
                                                                  self.entry_a.get(),))

    self.entry_NAME = ttk.Entry(self)
    self.entry_NAME.place(x=200, y=20)
    self.entry_KD = ttk.Entry(self)
    self.entry_KD.place(x=200, y=50)
    self.entry_Kills = ttk.Entry(self)
    self.entry_Kills.place(x=200, y=80)
    self.entry_CLUTCHES = ttk.Entry(self)
    self.entry_CLUTCHES.place(x=200, y=110)
    self.entry_UD = ttk.Entry(self)
    self.entry_UD.place(x=200, y=140)
    self.entry_OP = ttk.Entry(self)
    self.entry_OP.place(x=200, y=170)
    self.entry_R = ttk.Entry(self)
    self.entry_R.place(x=200, y=200)
    self.entry_DATE = ttk.Entry(self)
    self.entry_DATE.place(x=200, y=230)
    self.entry_PP = ttk.Entry(self)
    self.entry_PP.place(x=200, y=260)
    self.entry_a = ttk.Entry(self)
    self.entry_a.place(x=200, y=290)

    self.grab_set()
    self.focus_set()'''

Вот весь код:

import tkinter as tk
from tkinter import ttk
import sqlite3


class Main(tk.Frame):
    def __init__(self, root):
        super().__init__(root)
        self.init_main()
        self.bd = bd
        self.view_records()


def init_main(self):
    toolbar = tk.Frame(bg='#d7d8e0', bd=2)
    toolbar.pack(side=tk.TOP, fill=tk.X)

    self.add_img = tk.PhotoImage(file="add.gif")
    btn_open_dialog = tk.Button(toolbar, text='CALCULATOR', command=self.open_dialog, bg='#d7d9e0', bd=0,
                                compound=tk.TOP, image=self.add_img)
    btn_open_dialog.pack(side=tk.LEFT)

    self.tree = ttk.Treeview(self, columns=('NAME', 'KD', 'AVG', 'CLUTCHES', 'RATING 2.0', 'UTILITY_DAMAGE',
                                            'OPEN_KILLS', 'PlusPoints', 'DATE', 'a'), height=15, show='headings')

    self.tree.column('NAME', width=50, anchor=tk.CENTER)
    self.tree.column('KD', width=60, anchor=tk.CENTER)
    self.tree.column('AVG', width=60, anchor=tk.CENTER)
    self.tree.column('RATING 2.0', width=110, anchor=tk.CENTER)
    self.tree.column('CLUTCHES', width=80, anchor=tk.CENTER)
    self.tree.column('UTILITY_DAMAGE', width=80, anchor=tk.CENTER)
    self.tree.column('OPEN_KILLS', width=80, anchor=tk.CENTER)
    self.tree.column('PlusPoints', width=135, anchor=tk.CENTER)
    self.tree.column('DATE', width=70, anchor=tk.CENTER)
    self.tree.column('a', width=70, anchor=tk.CENTER)

    self.tree.heading('NAME', text='Name')
    self.tree.heading('KD', text='KD')
    self.tree.heading('AVG', text='AVG')
    self.tree.heading('RATING 2.0', text='UTILITY DAMAGE')
    self.tree.heading('CLUTCHES', text='CLUTCHES')
    self.tree.heading('UTILITY_DAMAGE', text='OPEN KILLS')
    self.tree.heading('OPEN_KILLS', text='RATING')
    self.tree.heading('PlusPoints', text='Adequate Teammates')
    self.tree.heading('DATE', text='PlusPoints')
    self.tree.heading('a', text='DATE')

    self.delete_img = tk.PhotoImage(file='delete.gif')
    btn_delete = tk.Button(toolbar, text='DELETE', bg='#d7d8e0', bd=0, image=self.delete_img,
                           compound=tk.TOP, command=self.delete_records)
    btn_delete.pack(side=tk.LEFT)

    self.tree.pack(side=tk.LEFT)

    scroll = tk.Scrollbar(self, command=self.tree.yview)
    scroll.pack(side=tk.LEFT, fill=tk.Y)
    self.tree.configure(yscrollcommand=scroll.set)

def records(self, NAME, KD, Kills, CLUTCHES, UD, OP, R, DATE, PP, a):
    self.bd.insert_data(NAME, KD, Kills, CLUTCHES, UD, OP, R, DATE, PP, a)
    self.view_records()

def view_records(self):
    self.bd.c.execute('''SELECT * FROM stats''')
    [self.tree.delete(i) for i in self.tree.get_children()]
    [self.tree.insert('', 'end', values=row) for row in self.bd.c.fetchall()]

def delete_records(self):
    for selection_item in self.tree.selection():
        self.bd.c.execute('''DELETE FROM stats WHERE NAME=?''', (self.tree.set(selection_item, '#1'),))
    self.bd.conn.commit()
    self.view_records()

def open_dialog(self):
    Child()`

Ответы (1 шт):

Автор решения: DGDays

Используй вот этот класс для создания дерева:

class MyTree(ttk.Treeview):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        # Элементам с тегом green назначить зеленый фон, элементам с тегом red
        # назначить красный фон

        self.tag_configure('A', background='green', foreground='white')
        self.tag_configure('B', background='red', foreground='white')

    def insert(self, parent_node, index, **kwargs):
        '''Назначение тега при добавлении элемента в дерево'''

        item = super().insert(parent_node, index, **kwargs)

        values = kwargs.get('values', None)

        if values:
            if values['нужен индекс твоего KD в insert'] > 1:
                super().item(item, tag='A')
            elif values['нужен индекс твоего KD в insert'] < 1: # Надо будет ещё учитывать что KD может быть равно 1 и тогда не будет использован ни один из цветов
                super().item(item, tag='B')    
        return item
→ Ссылка