13

Tkinterのテーブルに似たものを作成したいと思っていますが、必ずしも1つである必要はありません。

たとえば、ヘッダー「Name1」、「Name2」、「Value」を作成し、それぞれの下にいくつかの空白行を作成します。

これらの行は、後で計算した値または名前の文字列値を後で(したがってラベルに)入力したいと思います。

'Name2'の場合、実際には列全体をドロップダウンメニューにします。私はすでにそれ自身でコードを作成しましたが、それをこの「テーブル」に組み込む方法がわかりません。

たとえば、「テーブル」のように見えるようにラベルウィジェットの周囲に境界線を作成することは可能ですか?

この状況で何が可能になるかについての指針をいただければ幸いです。私のコードのいずれかを試してみる必要がある場合は、質問してください。ありがとうございました!

4

3 に答える 3

41

どんな問題がありますか?簡単な解決策は、を使用してウィジェットをレイアウトすること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()
于 2012-06-15T11:15:29.357 に答える
4

私が見つけたかなり単純なオブジェクトレスソリューション:

from Tkinter import *

rows = []
for i in range(5):
    cols = []
    for j in range(4):
        e = Entry(relief=RIDGE)
        e.grid(row=i, column=j, sticky=NSEW)
        e.insert(END, '%d.%d' % (i, j))
        cols.append(e)
    rows.append(cols)

def onPress():
    for row in rows:
        for col in row:
            print col.get(),
        print

Button(text='Fetch', command=onPress).grid()
mainloop()

また

# simple 2d table

from Tkinter import *

for i in range(5):
    for j in range(4):
        l = Label(text='%d.%d' % (i, j), relief=RIDGE)
        l.grid(row=i, column=j, sticky=NSEW)

mainloop()

すべてhttp://www.java2s.com/Code/Python/GUI-Tk/で入手できます

于 2016-04-15T14:18:13.583 に答える
0

ディクショナリからテーブルを作成する方法:

my_dict = {
    1: {'Header1': 'Row1_Value1', 'Header2': 'Row1_Value2', 'Header3': 'Row1_Value3', },
    2: {'Header1': 'Row2_Value1', 'Header2': 'Row2_Value2', 'Header3': 'Row2_Value3', },

    }

# Create the header
for column, header in enumerate(my_dict[1]):
    Label(self, text=header).grid(row=0, column=0+column)

# Fill in the values
for row, element in enumerate(my_dict.values()):
    for column, (header, value) in enumerate(element.items()):
        Label(self, text=value).grid(row=1+row, column=0+column)
于 2019-07-04T12:51:20.847 に答える