为什么.insert没有将条目文本添加到数组(Python)

时间:2017-07-03 20:43:43

标签: python tkinter

我的代码的这一部分是问题:我想通过在条目小部件中输入文本来为Name_List添加名称。然后使用“添加”按钮通过函数add_name将项目插入Name_List。

import tkinter as tk
from tkinter import *

Name_List = []

...

class NamePage(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self,parent)
        name=StringVar()
        name_entry= tk.Entry(self, text="Enter name:", textvariable=name)
        name_entry.pack()
        add_button= tk.Button(self, text="Add",
                              command=lambda: self.add_name(name))
        add_button.pack()
        To_Role_List= tk.Button(self, text="Assign Roles",
                                command=lambda: self.print_namelist())
        To_Role_List.pack()

    def add_name(self,name,i=0):
        Name_List.insert(i, name)
        print(Name_List)
        i+=1

    def print_namelist(self):
        for i in [0,len(Name_List)]:
            print (Name_List[i])


app=TOS_outline()
app.mainloop()

我的结果是,在Entry小部件中输入名称“Alpha”后,似乎是这样(当然使用打印):

[<tkinter.StringVar object at 0x03E7D650>]

我需要更改/修复什么?

2 个答案:

答案 0 :(得分:1)

您将变量传递给.insert而不是其值。 Name_List.insert(i, name)必须为Name_List.insert(i, name.get())

答案 1 :(得分:1)

如果你想使用python列表,不要使用像:

这样的计数器或范围
def add_name(self,name,i=0):
    Name_List.insert(i, name)
    print(Name_List)
    i+=1

def print_namelist(self):
    for i in [0,len(Name_List)]:
        print (Name_List[i])

改为使用:

def add_name(self,name):
    Name_List.append(name)
    print(Name_List)

def print_namelist(self):
    for name in Name_List:
        print (name)

使用get()获取StringVar对象的值

nombre = StringVar() 
id_art = IntVar()  
nombre.set("Python para impacientes") 
id_art.set(1)  
blog = ttk.Entry(ventana, textvariable=nombre, width=25) 
arti = ttk.Label(ventana, textvariable=id_art) 
print('Blog:', nombre.get()) 
print('Id artículo:', id_art.get())

示例来自:http://python-para-impacientes.blogspot.com.es/2016/02/variables-de-control-en-tkinter.html(西班牙语)