2012-06-15 8 views
6

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

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

これらの行は、私が計算した値または名前の文字列値を後で(したがってラベル)に書き込むことを希望します。

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

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

この状況で可能なことを指摘するには、非常に感謝しています。私のコードの中に何かがあることが必要な場合は、ただ質問してください。ありがとうございました!

+0

で入手可能なすべての/tkinter.unpythonic.net/wiki/TkTable)? – Simon

+0

私は使用しているPCでダウンロードできません...ブロックされています! – user2063

+0

でもこのhttp://tkinter.unpy.net/wiki/TkTableWrapper? – Simon

答えて

31

あなたはどんな問題を抱えていますか?単純な解決策は、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() 
+0

ありがとう、それは素晴らしいです! – user2063

+0

私の唯一の問題は、今まで私が本当に '自己'や '__init__'を使ったことがなく、他の機能をメニューに組み込む方法を理解していないことです。あなたにアドバイスを与えることができますか? !) お願いします? – user2063

+0

たとえば、Frameに名前を割り当てる方法について少し混乱していますが、オープニングやメニューなどの機能があります。 – user2063

2

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

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() 

を[TkTable](HTTPと間違っているものをhttp://www.java2s.com/Code/Python/GUI-Tk/

関連する問題