我如何使用 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))
tkinter
有 Entry()
来获取文本,您可以将它与布局管理器 .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
我有一个 19x5 矩阵,默认情况下只有零。我想使用 tkinter 创建一个 window,它显示一个空的 19x5 矩阵,用户将用值(正实数)填充该矩阵或留空。在那种情况下,我希望空白输入保持零,输入值替换相应位置的零,并保存新矩阵。
import numpy as np
import PySimpleGUI as sg
from tkinter import *
demand = np.zeros((19,5))
tkinter
有 Entry()
来获取文本,您可以将它与布局管理器 .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