使用Tkinter显示GUI中的对象列表

时间:2016-11-23 06:42:49

标签: python tkinter

我有一个程序根据用户输入填充列表。这些列表实际上是具有2个值的对象列表:名称和数量。

我目前正在运行tkinter并尝试在GUI中以可读格式返回这些列表。这就是我到目前为止所拥有的:

from tkinter import *
from tkinter import ttk

Containers =[]
Lids = []
Wicks = []
Labels = []
Misc = []
Items = [Containers, Lids, Wicks, Labels, Misc]

class item(object):

    #Constructor
    def __init__(self, name, amount):
        self.name = name
        self.amount = amount

    #Accessors
    def getName(self):
        return self.name

    def getAmount(self):
        return self.amount

def addItem(*args):
    s = name.get()
    global new_item
    new_item = item(s, 0)
    return new_item
    Containers.append(new_item) 

name = StringVar()
amount = StringVar()
remove_item = StringVar()
add_amount = StringVar()
subtract_amount = StringVar()

   ...#Leaving out all the frame information

t = Text(mainframe, width=60)
for item in Containers:
    t.insert(END, item)
t.grid(column = 1, columnspan = 3, row = 10, padx = 5, pady = 10)

root.bind('<Return>', addItem())

root.mainloop()

当我尝试运行以下内容时会发生错误:我收到错误:&#39; item&#39;对象不可调用

t = Text(mainframe, width=60)
    for item in Containers:
        t.insert(END, item)
    t.grid(column = 1, columnspan = 3, row = 10, padx = 5, pady = 10)

如何在主GUI窗口中打印这些列表?

1 个答案:

答案 0 :(得分:1)

问题在于你的绑定:

root.bind('<Return>', addItem())

当评估此行时,addItem将返回一个项目对象at- return new_item - 当你点击返回时,python将尝试调用new_item。你写的主要是:

new_item = additem()
root.bind('<Return>', new_item)

如果您要退回该项目,则根本没有理由使用全局变量。你的意思是:

root.bind('<Return>', addItem)

所以当你点击返回时,会调用addItem函数。在这里,您可能认为需要全局变量,但可能有更好的方法,例如将整个应用程序封装在类中。 你的代码中有很多错误,所以我建议你在提出更好的问题之前先处理一下。例如:

Containers.append(new_item) 

永远不会被调用,因为它是在返回之后,你还没有输入一个你可能想要绑定的输入字段,而不是root,所以可以给出实际的输入。谷歌的一些Tk例子。