如何在Tkinter的输入网格中使用List设置textvariable
我创建了一个5x5的tkinter输入框网格,用户可以在里面输入数据。请问如何获取和设置选定输入框中的数据呢?
from tkinter import *
def print_value(entry):
print( entry.get())
uservalue[i,j].set('tessting')
root = Tk()
uservalue = []
height = 5
width = 1
for i in range(height): #Rows
for j in range(width): #Columns
entry = Entry(root, textvariable = uservalue[i,j], width=100) # this line give me error
entry.grid(row=i, column=j)
b = Button(root, text="print value", command= lambda entry=entry: print_value(entry), width=10)
b.grid(row=i, column=j+1)
mainloop()
如何使用 list[i,j]
来设置文本变量,以便获取和设置用户在输入网格中的输入内容?
2 个回答
0
我想这可能是你想要的内容:
from tkinter import *
def print_value(row, col):
print(uservalue[row][col].get())
# def print_value(var):
# print(var.get())
root = Tk()
uservalue = []
height = 5
width = 5
for i in range(height): #Rows
uservalue.append([])
for j in range(width): #Columns
var = StringVar()
uservalue[i].append(var)
entry = Entry(root, textvariable=var, width=100)
entry.grid(row=i, column=j*2)
# b = Button(root, text="print value", command= lambda var=var: print_value(var), width=10)
b = Button(root, text="print value", command= lambda row=i, col=j: print_value(row, col), width=10)
b.grid(row=i, column=j*2+1)
mainloop()
- 多维列表(就是里面有列表的列表)需要用
my_list[x][y]
这种方式来访问,而不是my_list[x,y]
。 textvariable=
这个参数需要一个tkinter.Variable
的实例,或者它的子类(比如tkinter.StringVar
)。- 这意味着你首先得创建一个
StringVar()
的实例。 - 然后你可以把它添加到列表里,并用它来设置你的输入框(Entry widget)。
0
把字符串变量添加到一个包含行和列的二维列表中。要获取某个值,可以用 list[row][column].get() 这样的方式。
import tkinter as tk
def get_val(row, col):
table[row][col] = entry_vars[row][col].get()
root = tk.Tk()
height = 5
width = 1
# create a sample data
table = [[''] for i in range(height) for j in range(width)]
# List to hold Entry widget variables
entry_vars = []
# Create Entry widgets for each cell
for i in range(height):
row_vars = []
for j in range(width):
var = tk.StringVar()
var.set(table[i][j])
entry = tk.Entry(root, textvariable=var)
entry.grid(row=i, column=j)
entry.bind('<FocusOut>', lambda event, row=i, col=j: get_val(row, col))
row_vars.append(var)
entry_vars.append(row_vars)
root.mainloop()