2011-08-17 70 views
0

我有一个来自猕猴桃框架的通用示例,我的问题是: 如何从猕猴桃对象列表中只删除一个项目。删除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() 
+0

我解决了这个问题:fruits.remove(水果[0]) – MasterSieben

回答

0

此代码:

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