#python #list #tkinter #colors
Вопрос:
Я работал над проектом, в котором я намерен использовать tkinter для создания окна с таблицей, содержащей все мои результаты. Для этого у меня есть следующий код. Код работает просто отлично, но проблема в том, что мне нужно приписать некоторые цвета определенным строкам и столбцам, в то время как в текущем коде все заканчивается синим цветом. Допустим, например, мне нужно, чтобы первые 3 строки столбца 1 были выделены красным цветом. Есть какие-нибудь идеи о том, как это можно сделать? Большое вам спасибо за любую помощь.
# Create a table for tkinter
class Table:
def __init__(self, root):
# code for creating table
for i in range(total_rows):
for j in range(total_columns):
self.e = Entry(root, width=20, fg='blue',
font=('Arial', 16, 'bold'))
self.e.grid(row=i, column=j)
self.e.insert(END, lst[i][j])
# take the data
lst = [(1, 'Raj', 'Mumbai', 19),
(2, 'Aaryan', 'Pune', 18),
(3, 'Vaishnavi', 'Mumbai', 20),
(4, 'Rachna', 'Mumbai', 21),
(5, 'Shubham', 'Delhi', 21)]
# find total number of rows and columns in list for tkinter
total_rows = len(lst)
total_columns = len(lst[0])
# create root window
root = Tk()
root.title("Results")
t = Table(root)
root.mainloop()
Комментарии:
1. Вы должны поместить все
<tkinter.Entry>
объекты в список. Затем вы можете повторить их с помощьюfor
цикла и использоватьentry.config(bg=<new background colour>)
илиentry.config(fg=<new foreground colour>)
2. Как поместить все объекты ввода в список? Не могли бы вы привести пример со списком, о котором вы говорите ?
3. Кстати, вчера я сделал свой собственный виджет таблицы с помощью tkinter, так что ваше время идеально подходит :D.
4. Рад это слышать 😀
Ответ №1:
Попробуйте это:
import tkinter as tk
# It's better to inherit from `tkinter.Frame` so we can use the table
# as a normal tkinter widget
class Table(tk.Frame):
def __init__(self, master=None, data=[], **kwargs):
super().__init__(master, **kwargs)
self.table = []
for i, _list in enumerate(data):
row = []
for j, entry_data in enumerate(_list):
entry = tk.Entry(self, width=20, fg="blue",
font=("Arial", 16, "bold"))
entry.grid(row=i, column=j)
entry.insert("end", entry_data)
row.append(entry)
self.table.append(row)
def column_config(self, column_number, **kwargs):
for row in self.table:
# Call `<tkinter.Entry>.config(**kwargs)`
row[column_number].config(**kwargs)
# take the data
data = [(1, "Raj", "Mumbai", 19),
(2, "Aaryan", "Pune", 18),
(3, "Vaishnavi", "Mumbai", 20),
(4, "Rachna", "Mumbai", 21),
(5, "Shubham", "Delhi", 21)]
# create root window
root = tk.Tk()
root.title("Results")
table = Table(root, data)
table.pack()
# Column 3 is the last one
table.column_config(3, fg="red", bg="cyan")
root.mainloop()
Я внес несколько изменений:
- Я поставил сделал
Table
действие, как и любой другойtkinter
виджет, унаследовав отtkinter.Frame
- Я также поместил все записи в список, чтобы позже получить к ним доступ
- Также я добавил
column_config
метод
Комментарии:
1. Это действительно кажется лучше. Я попытаюсь изменить свой основной код в соответствии с этим. Большое спасибо!