首页 > 解决方案 > 如何在 tkinter 中创建任意数量的输入框?

问题描述

我正在创建一个应用程序来处理各种矩阵数学,我目前正在将任何 nxn 矩阵的输入输入到输入框网格中。我当前的功能使我正在寻找的网格,但它一遍又一遍地是同一个输入框。我想知道在布置任意数量的条目时是否有任何方法可以使它们全部唯一(例如 entry_0_0 , entry_n_n)。

from numpy import *
from tkinter import *


master = Tk()
master.title('Matrix')
num = StringVar()

def createGrid(r, c):

    for i in range(r):
        for j in range(c):
            entry = Entry(master, textvariable=num, width=2)
            entry.grid(row=i, column=j)
            j += 1
        i += 1

r = int(input('Enter Square Matrix Size: '))
c = r

createGrid(r, c)

标签: pythonpython-3.xmatrixtkintertkinter-entry

解决方案


但它一遍又一遍是同一个输入框

不,不是。您的输入框是唯一的,但它们指向相同的StringVar文本变量,因此都将显示相同的值。您需要的不是单个StringVar矩阵,而是与您的条目矩阵匹配的矩阵:

from tkinter import *

master = Tk()

def createGrid(rows, columns):

    textMatrix = []

    for r in range(rows):
        textRow = []

        for c in range(columns):
            variable = StringVar()

            entry = Entry(master, textvariable=variable, width=2)
            entry.grid(row=r, column=c)

            textRow.append(variable)

        textMatrix.append(textRow)

    return textMatrix

columns = rows = int(input('Enter Square Matrix Size: '))

num = StringVar()

text_matrix = createGrid(rows, columns)

# Test that we can set all the matrix entries independently

for r in range(rows):
    for c in range(columns):
        text_matrix[r][c].set(r * columns + c)

master.mainloop()

在此处输入图像描述


推荐阅读