2012-06-15 7 views
6

나는 Tkinter의 테이블과 비슷한 것을 만들려고하는데, 반드시 하나 일 필요는 없습니다.테이블 모양의 Tkinter 만들기

예를 들어 'Name1', 'Name2', 'Value'헤더를 만들고 싶습니다. 각각 아래에 몇 개의 빈 행이 있어야합니다.

이 행은 나중에 계산 한 값 또는 이름에 대한 문자열 값으로 나중에 채우기를 원합니다 (레이블).

'Name2'에 대해서는 전체 열이 드롭 다운 메뉴가되도록하고 싶습니다. 나는 이미 하나의 코드를 만들었지 만 이것을이 '테이블'에 통합하는 방법을 모르겠습니다.

레이블 위젯 주위에 테두리를 만들어 '테이블'처럼 보이게 할 수 있습니까?

이 상황에서 가능할 것으로 예상되는 모든 사항에 대해서는 매우 감사하겠습니다. 내 코드에서 뭔가를해야한다면, 그냥 물어보십시오. 고맙습니다!

+0

에서 HTTP [TkTable] (무엇이 문제 ://tkinter.unpythonic.net/wiki/TkTable)? – Simon

+0

사용중인 PC에서 다운로드 할 수 없습니다 ... 차단되었습니다! – user2063

+0

심지어 http://tkinter.unpy.net/wiki/TkTableWrapper? – Simon

답변

31

어떤 문제가 있습니까? 간단한 해결책은 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() 
+0

고마워요, 멋지 네요! – user2063

+0

내 유일한 문제는 지금까지 'self'나 '__init__'을 많이 사용하지 못했고 다른 기능을 메뉴에 통합하는 방법을 이해하지 못했기 때문에 몇 가지 조언을 해줄 수 있겠습니까 (초보자 용) !) 제발? – user2063

+0

예를 들어, 프레임에 이름을 지정하는 방법에 대해 조금 혼란 스럽지만 ... 개방 및 메뉴 등의 기능을 가지고 있습니다. – 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() 

모두 사용할 수를 http://www.java2s.com/Code/Python/GUI-Tk/