如何在tkinter中创建任意数量的Entry框?

时间:2018-10-12 15:59:46

标签: python python-3.x matrix tkinter tkinter-entry

我正在创建一个应用程序来处理各种矩阵数学,并且我目前正在将任何n x n矩阵的输入都放入输入框的网格中。我当前的功能使我正在寻找的网格,但是它是一遍又一遍的相同输入框。我想知道在布置任意数量的条目时是否有任何方法可以使它们全部唯一(类似于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)

1 个答案:

答案 0 :(得分:1)

  

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

不,不是。您的输入框是唯一的,但它们 all 都指向相同的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()

enter image description here