ntsnb 发表于 2020-10-31 04:28:11

使用Tkinter时我想动态生成n个输入框时出现问题

我在b站上学龄两个月,是个萌新,我每次想要生成一个新的输入框,必须先初始化Entry生成一个实例,但是这个实例变量必须命名,如何在for循环内给新生成的这个实例变量命不一样的名字,我用了locals,但无法运行
我写了一点点的代码如下:
for i in range(a):
    Label(root2, text = "请输入第%d个电阻的阻值:"%(i + 1)).grid(row = i, column = 3)
    locals()['g'+str(i)] = Entry(root)
    ('g'+str(i)).grid(row = i, column = 4)
    Label(root2, text="第一个结点编号:" % (i + 1)).grid(row=i, column = 5)
    locals()['m' + str(i)] = Entry(root)
    ('m' + str(i)).grid(row = i, column = 6)
    Label(root2, text="第二个结点编号:" % (i + 1)).grid(row=i, column = 7)
    locals()['n' + str(i)] = Entry(root)
    ('n' + str(i)).grid(row = i, column = 8)
mainloop()
最后几行就是问题所在

ntsnb 发表于 2020-10-31 04:28:44

求问我该怎么改

xiangjianshinan 发表于 2020-10-31 06:11:46

from tkinter import *
root=Tk()
a=5

for i in range(a):
    Label(root, text = "请输入第%d个电阻的阻值:"%(i + 1)).grid(row = i, column = 3)
    locals()['g'+str(i)] = Entry(root)
    locals()['g'+str(i)].grid(row = i, column = 4)
    Label(root, text="第%d一个结点编号:" % (i + 1)).grid(row=i, column = 5)
    locals()['m' + str(i)] = Entry(root)
    locals()['m' + str(i)].grid(row = i, column = 6)
    Label(root, text="第%d二个结点编号:" % (i + 1)).grid(row=i, column = 7)
    locals()['n' + str(i)] = Entry(root)
    locals()['n' + str(i)].grid(row = i, column = 8)
mainloop()

xiangjianshinan 发表于 2020-10-31 06:12:19

是这样子的吗?

qiuyouzhi 发表于 2020-10-31 08:21:04

为何要给它起不一样的名字呢?
直接获取它的值,然后存到一个列表里面不就好了

疾风怪盗 发表于 2020-10-31 09:30:45

上次论坛有个帖子,要循环添加按钮,获取文件路径
可以参考下
import tkinter as tk
from tkinter.filedialog import *

root = tk.Tk()
root.geometry('500x300')
iCount = input('請輸入文件個數:')
name_list = ['a', 'b', 'c', 'd']# 定义对象名字列表


class file_name():# 定义类,用来创建循环对象
    def __init__(self, i):
      self.sFilePath = tk.StringVar()
      self.name = f'name{i}'
      print(self.name)

    def btn_com(self):
      self.sFilePath.set(askopenfilename())


for i in range(1, int(iCount) + 1):
    name_list = file_name(i)# 用对象名字列表内元素,创建循环对象
    name_list.name = tk.Button(root, text='請選擇文件' + str(i), command=name_list.btn_com)
    name_list.name.grid(row=i - 1, column=0)
    tk.Entry(root, textvariable=name_list.sFilePath, width=50).grid(row=i - 1, column=1)

file_name_list = ['a', 'b', 'c', 'd']
for i in range(1, int(iCount) + 1):
    name_list.name['text'] = file_name_list
mainloop()

ntsnb 发表于 2020-10-31 23:55:18

疾风怪盗 发表于 2020-10-31 09:30
上次论坛有个帖子,要循环添加按钮,获取文件路径
可以参考下

谢谢大佬{:10_288:}

ntsnb 发表于 2020-10-31 23:56:31

qiuyouzhi 发表于 2020-10-31 08:21
为何要给它起不一样的名字呢?
直接获取它的值,然后存到一个列表里面不就好了

请问具体是如何实现的呢?

ntsnb 发表于 2020-11-1 00:26:07

qiuyouzhi 发表于 2020-10-31 08:21
为何要给它起不一样的名字呢?
直接获取它的值,然后存到一个列表里面不就好了

十分感谢大佬的思路{:10_288:}
页: [1]
查看完整版本: 使用Tkinter时我想动态生成n个输入框时出现问题