Как окрасить значение в таблице 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