Условное форматирование Tkinter: измените цвет, если предыдущее значение не равно?

#python-3.x #tkinter

Вопрос:

Я хотел бы иметь условное форматирование в tkinter. Программа должна окрашивать желтым цветом только значения, если предыдущее значение столбца отличается, как на фотографии.

введите описание изображения здесь

 import tkinter
import csv

root = tkinter.Tk()

# open file
with open("dati/esempio.csv", newline = "") as file:
   reader = csv.reader(file)

   # r and c tell us where to grid the labels
   r = 0
   for col in reader:
      c = 0
      for row in col:
         # i've added some styling
         label = tkinter.Label(root, width = 10, height = 2, 
                               text = row, relief = tkinter.RIDGE, background='lightblue')
         label.grid(row = r, column = c)
         c  = 1
      r  = 1

root.mainloop()
 

Комментарии:

1. Поместите все метки в 2D-массив, а затем просто пройдите по каждому столбцу. Также вы можете упростить свой код, если используете встроенную enumerate функцию вместо добавления 1 в c / r каждый раз в цикле for

2. Вы дали нам спецификацию, но не задали вопроса. Stackoverflow не предназначен для бесплатной службы кодирования. С какой частью проблемы вам нужна помощь?

Ответ №1:

Вы можете сохранить предыдущее значение и использовать оператор if-для проверки и установки цвета. Затем вы устанавливаете цвет в качестве фона для своей этикетки.

    r = 0
   for col in reader:
      c = 0
      prev_value = col[0]
      for row in col:
          if row != prev_value:
              col = 'yellow'
              prev_value = row
          else:
              col = 'lightblue'

          tkinter.Label(root, width = 10, height = 2,
                        text = row, relief = tkinter.RIDGE,
                        background=col).grid(row = r, column = c)

         [..your code..]
 

Комментарии:

1. Извините, я пытался, но это совсем не то, о чем я просил. С помощью вашего метода измените цвет между столбцами и предыдущими, пока я ищу изменение цвета между строкой данных и предыдущей строкой данных