GUI(输入和输出矩阵)?

2024-06-20

我需要创建一个 GUI 将数据输入到矩阵或表格中并读取此表单数据。
完美的解决方案是限制输入表单仅允许float.
例如:

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

问题:

  1. 我可以用什么?
    Tkinter 没有表,Python 3.3.2 不支持 wxPython

  2. PyQt4 怎么样?
    也许你可以举一些例子来说明如何从表中获取数据[[],[],[]]?
    有人有想法吗?

Thanks


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

有关输入验证的更多信息可以在这里找到:在 tkinter 中交互式验证 Entry 小部件内容 https://stackoverflow.com/questions/4140437/python-tkinter-interactively-validating-entry-widget-content

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GUI(输入和输出矩阵)? 的相关文章

随机推荐