删除Python猕猴桃对象列表中的项目
问题描述:
我有一个来自猕猴桃框架的通用示例,我的问题是: 如何从猕猴桃对象列表中只删除一个项目。删除Python猕猴桃对象列表中的项目
谢谢你的时间!
import gtk
from kiwi.ui.objectlist import Column, ObjectList
class Fruit:
def __init__(self, name, cost):
self.name = name
self.cost = cost
fruits = ObjectList([Column('name', data_type=str, editable=True,
expand=True),
Column('cost', data_type=int, editable=True)])
for name, cost in [('Apple', 4),
('Pineapple', 2),
('Kiwi', 8),
('Banana', 3),
('Melon', 5)]:
fruits.append(Fruit(name, cost))
window = gtk.Window()
window.connect('delete-event', gtk.main_quit)
window.set_title('Editable Fruit List')
window.set_size_request(230, 150)
#
## remove fruits
#
fruits.remove(Fruit('Pineapple', 4)) #error
window.add(fruits)
window.show_all()
gtk.main()
答
此代码:
fruits.remove(Fruit('Pineapple', 4))
产生这样的错误:
Traceback (most recent call last):
...
fruits.remove(Fruit('Pineapple', 4)) #error
File "/tmp/kiwi/ui/objectlist.py", line 1651, in remove
raise ValueError("instance %r is not in the list" % instance)
ValueError: instance <__main__.Fruit instance at 0x90066cc> is not in the list
这是问题的准确描述。
的instance
参数的ObjectList
的.remove
方法应该是在列表中的对象已经。每当你打电话给Fruit(...)
时,你会得到一个新的实例,它的属性是一样的。如果实例不在列表中,则会引发ValueError(尽管documentation显然是这样说的)。例如:
new_fruit = Fruit('Pineapple', 4) # save this instance as new_fruit
fruits.append(new_fruit) # append this instance to the list
fruits.remove(new_fruit) # take this instance out ... success!
assert new_fruit is Fruit('Pineapple', 4) # False
因此,在现有的代码,你可能会想要做这样的事情,而不是(更换fruits.remove(Fruit('Pineapple', 4))
):
fruits.remove(fruits[1])
或者,把它绑一些UI动作(双-Click只是一个例子):
+0
感谢马蒂的时间和解释(很有教育意义)! – MasterSieben
我解决了这个问题:fruits.remove(水果[0]) – MasterSieben