Ответ 1
Какая у вас проблема? Простым решением является выкладка виджетов с помощью grid
. Вы можете поместить любой тип виджета, который вы хотите в каждой ячейке. И да, этикетки могут иметь границы. Хотя простой способ сделать линии сетки - использовать прокладку вокруг каждой ячейки, так что цвет рамки будет отображаться через промежутки.
Сделайте это в кадре. Если вам нужно прокрутить таблицу, поместите рамку внутри холста и добавьте полосы прокрутки. Есть примеры во всем Интернете о том, как создать прокручиваемый фрейм с помощью холста.
Вот очень быстрый пример, который использует только ярлыки и не прокручивается. Я оставлю точную реализацию того, что вам нужно, как упражнение для читателя.
import Tkinter as tk
class ExampleApp(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
t = SimpleTable(self, 10,2)
t.pack(side="top", fill="x")
t.set(0,0,"Hello, world")
class SimpleTable(tk.Frame):
def __init__(self, parent, rows=10, columns=2):
# use black background so it "peeks through" to
# form grid lines
tk.Frame.__init__(self, parent, background="black")
self._widgets = []
for row in range(rows):
current_row = []
for column in range(columns):
label = tk.Label(self, text="%s/%s" % (row, column),
borderwidth=0, width=10)
label.grid(row=row, column=column, sticky="nsew", padx=1, pady=1)
current_row.append(label)
self._widgets.append(current_row)
for column in range(columns):
self.grid_columnconfigure(column, weight=1)
def set(self, row, column, value):
widget = self._widgets[row][column]
widget.configure(text=value)
if __name__ == "__main__":
app = ExampleApp()
app.mainloop()