どんな問題がありますか?簡単な解決策は、を使用してウィジェットをレイアウトすることgrid
です。各セルには、必要なタイプのウィジェットを配置できます。はい、ラベルには境界線を付けることができます。ただし、グリッド線を作成する簡単な方法は、各セルの周りにパディングを使用して、フレームの色がギャップを通して表示されるようにすることです。
フレームでこれを行います。テーブルをスクロールできるようにする必要がある場合は、フレームをキャンバス内に配置し、スクロールバーを追加します。キャンバスを使用してスクロール可能なフレームを作成する方法については、Web全体に例があります。
これは、ラベルだけを使用し、スクロールしない非常に簡単な例です。読者のための演習として、必要なものの正確な実装を残しておきます。
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()