#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
каждый раз в цикле for2. Вы дали нам спецификацию, но не задали вопроса. 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. Извините, я пытался, но это совсем не то, о чем я просил. С помощью вашего метода измените цвет между столбцами и предыдущими, пока я ищу изменение цвета между строкой данных и предыдущей строкой данных