我如何使用 tkinter 从用户在对话框中的输入创建矩阵

How can i create a matrix from user's input in dialog box using tkinter

我有一个 19x5 矩阵,默认情况下只有零。我想使用 tkinter 创建一个 window,它显示一个空的 19x5 矩阵,用户将用值(正实数)填充该矩阵或留空。在那种情况下,我希望空白输入保持零,输入值替换相应位置的零,并保存新矩阵。

import numpy as np
import PySimpleGUI as sg
from tkinter import *

demand = np.zeros((19,5))

tkinterEntry() 来获取文本,您可以将它与布局管理器 .grid(row, column) 一起使用来创建 matrix/table 和许多 Entry()。您可以使用两个 for- 循环将小部件放入行和列中。

但您可以在标准 window - tkinter.Tk() 中完成 - 而不是在对话框中。

您必须添加从所有 Entry() 获取值并放入 numpy 数组的代码。最好将此代码分配给 Button().

import numpy as np
import tkinter as tk   # PEP8: `import *` is not preferred

# --- functions ---

def get_data():
    for r, row in enumerate(all_entries):
        for c, entry in enumerate(row):
            text = entry.get()
            demand[r,c] = float(text)
        
    print(demand)
    
# --- main ---

rows = 19
cols = 5

demand = np.zeros((rows, cols))

window = tk.Tk()

all_entries = []
for r in range(rows):
    entries_row = []
    for c in range(cols):
        e = tk.Entry(window, width=5)  # 5 chars
        e.insert('end', 0)
        e.grid(row=r, column=c)
        entries_row.append(e)
    all_entries.append(entries_row)
        
b = tk.Button(window, text='GET DATA', command=get_data)
b.grid(row=rows+1, column=0, columnspan=cols)

window.mainloop()        

编辑:

您还可以使用 Label 为行和列添加数字

import numpy as np
import tkinter as tk   # PEP8: `import *` is not preferred

# --- functions ---

def get_data():
    for r, row in enumerate(all_entries):
        for c, entry in enumerate(row):
            text = entry.get()
            demand[r,c] = float(text)
        
    print(demand)
    
# --- main ---

rows = 19
cols = 5

demand = np.zeros((rows, cols))

window = tk.Tk()

for c in range(cols):
    l = tk.Label(window, text=str(c))
    l.grid(row=0, column=c+1)

all_entries = []
for r in range(rows):
    entries_row = []
    l = tk.Label(window, text=str(r+1))
    l.grid(row=r+1, column=0)
    for c in range(cols):
        e = tk.Entry(window, width=5)  # 5 chars
        e.insert('end', 0)
        e.grid(row=r+1, column=c+1)
        entries_row.append(e)
    all_entries.append(entries_row)
        
b = tk.Button(window, text='GET DATA', command=get_data)
b.grid(row=rows+1, column=0, columnspan=cols)

window.mainloop()        

如果您想要更复杂的东西(具有更多功能),那么您可以使用 pandastable,您可以在 DataExplorer

中看到

更多内容在我的 post 博客中:Tkinter PandasTable Examples


顺便说一句: PEP 8 -- Style Guide for Python Code