2013-09-24 5 views
-2

파이썬 3.3.2 안녕하세요. 내 문제 - 입력 데이터 (매트릭스 또는 테이블)에 대한 GUI를 작성해야합니다. 그리고이 양식 데이터에서 가져 가라. 예를 들어GUI (입력 및 출력 행렬)?

A=[[1.02,-0.25,-0.30,0.515],[-0.41,1.13,-0.15,1.555],[-0.25,-0.14,1.21,2.780]]

완벽한 솔루션 (단 플로트) 입력 양식에 대한 제한이다.

질문 : 무엇을 사용할 수 있습니까? Tkinter는 테이블을 가지고 있지 않습니다. wxPython은 Python 3에서 지원되지 않습니다. PyQt4? (예 : [[],[],[]]의 테이블에서 데이터를 가져 오는 방법을 알고 있습니까?)
누구나 알고 있습니까?

답변

6

tkinter를 사용하면 특별한 테이블 위젯이 필요하지 않습니다. 일반적인 입력 위젯 그리드를 만드십시오. 스크롤바가 필요하다면 스크롤바가 약간 더 어려울 것입니다. (그리고이 방법에 대한 예제가 있습니다.) 작은 그리드를 그리는 것은 매우 간단합니다. 여기

또한 일부 입력 유효성 검사를 포함하는 예이다 :

import tkinter as tk 

class SimpleTableInput(tk.Frame): 
    def __init__(self, parent, rows, columns): 
     tk.Frame.__init__(self, parent) 

     self._entry = {} 
     self.rows = rows 
     self.columns = columns 

     # register a command to use for validation 
     vcmd = (self.register(self._validate), "%P") 

     # create the table of widgets 
     for row in range(self.rows): 
      for column in range(self.columns): 
       index = (row, column) 
       e = tk.Entry(self, validate="key", validatecommand=vcmd) 
       e.grid(row=row, column=column, stick="nsew") 
       self._entry[index] = e 
     # adjust column weights so they all expand equally 
     for column in range(self.columns): 
      self.grid_columnconfigure(column, weight=1) 
     # designate a final, empty row to fill up any extra space 
     self.grid_rowconfigure(rows, weight=1) 

    def get(self): 
     '''Return a list of lists, containing the data in the table''' 
     result = [] 
     for row in range(self.rows): 
      current_row = [] 
      for column in range(self.columns): 
       index = (row, column) 
       current_row.append(self._entry[index].get()) 
      result.append(current_row) 
     return result 

    def _validate(self, P): 
     '''Perform input validation. 

     Allow only an empty value, or a value that can be converted to a float 
     ''' 
     if P.strip() == "": 
      return True 

     try: 
      f = float(P) 
     except ValueError: 
      self.bell() 
      return False 
     return True 

class Example(tk.Frame): 
    def __init__(self, parent): 
     tk.Frame.__init__(self, parent) 
     self.table = SimpleTableInput(self, 3, 4) 
     self.submit = tk.Button(self, text="Submit", command=self.on_submit) 
     self.table.pack(side="top", fill="both", expand=True) 
     self.submit.pack(side="bottom") 

    def on_submit(self): 
     print(self.table.get()) 


root = tk.Tk() 
Example(root).pack(side="top", fill="both", expand=True) 
root.mainloop() 

입력 유효성 검사에 대한 자세한 여기에서 찾을 수 있습니다 Interactively validating Entry widget content in tkinter