![](/img/trans.png)
[英]Beginner Python: Display objects in list within GUI window using tkinter
[英]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.