簡體   English   中英

使用Tkinter在GUI中顯示對象列表

[英]Showing list of objects in GUI using 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()

當我嘗試運行以下命令時,會發生錯誤:我無法調用“ item”對象

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主窗口中打印這些列表?

問題出在您的綁定中:

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

當評估此行時,addItem將在return new_item返回一個項目對象-當您按下return時,python將嘗試調用new_item。 您寫的基本上是:

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

而且,如果您要退貨,則根本沒有理由使用全局變量。 你的意思是:

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

因此,當您按回車鍵時,將調用addItem函數。 在這里您可能會認為您需要全局var,但是可能有更好的方法,例如將整個應用程序封裝在一個類中。 您的代碼中有很多錯誤,因此建議您在提出更好的問題之前先進行一些處理。 例如:

Containers.append(new_item) 

永遠不會被調用,因為它是在返回之后,而且您還沒有放置可能是要綁定的輸入字段,而不是根字段,因此可以給出實際的輸入。 Google一些Tk的例子。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM