Python. GUI(input and output matrices)?
Question: Python 3.3.2 Hello.My problem - need create GUI for input data(matrix or
table).And take from this form data. For example:

`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]]`

Perfect solution is restrictions to input form(only float).

Questions: What i can use? Tkinter haven't table.. wxPython not supported by
Python 3. PyQt4?(mb u have exampel how take data from tabel in `[[],[],[]]`?)  
Anyone have idea?

Thnx!


Answer: Using tkinter, you don't need a special table widget to do this -- just create
a grid of normal entry widgets. If you have so many that you need a scrollbar
it's slightly more difficult (and there are examples on this site for how to
do that), but just to create a grid of something small it's very
straightforward.

Here's an example that also includes some input validation:

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

More about input validation can be found here: [Python/Tkinter: Interactively
validating Entry widget
content](http://stackoverflow.com/questions/4140437/python-tkinter-
interactively-validating-entry-widget-content)

