2011-08-17 71 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