Python tkinter get()没有属性

时间:2015-08-12 20:45:48

标签: python tkinter

我想在Entry窗口小部件中使用列表中的每个变量,并在按下按钮后获取文本。

self.input_text = ['l1', 'l2', 'l3']

self.activeRow = 3
for e in self.input_text:
    e = StringVar()
    t = Entry(textvariable=e)
    t.grid(row=self.activeRow,column=4,columnspan=2,sticky=W)
    self.activeRow += 1

最后,我想将列表中每个变量的值写入文件但是现在,按下按钮后我似乎无法打印self.input_text[0]

button1 = Button(text='Write',command=self.__writeNewInfo, width = 15)
button1.grid(row=self.activeRow,column=5,sticky=W)

def __writeNewInfo(self):
    x = self.input_text[0].get()
    y = self.input_text[1].get()
    z = self.input_text[2].get()
    print x
    print y
    print z

2 个答案:

答案 0 :(得分:0)

在创建StringVar的实例时,您做错了。您将e设置为列表中的项目,然后将其覆盖为空StringVar。而是尝试:

for i, e in enumerate(self.input_text):
    self.input_text[i] = StringVar() #Overwrite this item in the list
    self.input_text[i].set(e) #Set the StringVar to take the value from the list
    t = Entry(textvariable=self.input_text[i])
    t.grid(row=self.activeRow,column=4,columnspan=2,sticky=W)
    self.activeRow += 1

答案 1 :(得分:0)

self.input_text基本上是一个字符串列表。如果要从条目中检索某些内容,则需要保留此条目的变量并在其上调用get()。

例如:

self.input_text = ['l1', 'l2', 'l3']
self.entries = []


self.activeRow = 3
for e in self.input_text:
    e = StringVar()
    t = Entry(textvariable=e)
    t.grid(row=self.activeRow,column=4,columnspan=2,sticky=W)
    self.activeRow += 1

    self.entries.append(t)





button1 = Button(text='Write',command=self.__writeNewInfo, width = 15)
button1.grid(row=self.activeRow,column=5,sticky=W)

def __writeNewInfo(self):
    x = self.entries[0].get()
    y = self.entries[1].get()
    z = self.entries[2].get()
    print x
    print y
    print z