2011-09-20 12 views
6

से आइटम विजेट निकालें मेरे पास QListWidget है और मुझे कुछ आइटम निकालने की आवश्यकता है।PyQt4 - QListWidget

मैंने जो शोध किया है, उससे यह आम तौर पर अप्रिय बात है।

मैंने एक टन समाधान पढ़े हैं, लेकिन मेरे विशिष्ट परिदृश्य में कोई भी लागू नहीं है।
फिलहाल, मेरे पास केवल वास्तविक आइटम विजेट हैं जिनसे निपटने के लिए; उनके मूल्य या सूचकांक नहीं।

ऐसा इसलिए है क्योंकि मैं .selectedItems() के माध्यम से आइटम (हटाया जाना आवश्यक) प्राप्त करता हूं।

कोड यह रहा:

ItemSelect = list(self.ListDialog.ContentList.selectedItems()) 

for x in range (0, len(ItemSelect)): 
    print self.ListDialog.ContentList.removeItemWidget(ItemSelect[x]) 

यह कुछ भी नहीं करता है, लेकिन।
यह कोई त्रुटि नहीं उठाता है, लेकिन चयनित आइटम हटाए नहीं जाते हैं।
वस्तुओं को हटाने के लिए मैंने जो तरीकों को देखा है, उसके लिए इंडेक्स या आइटम का नाम आवश्यक है, जिसमें से मेरे पास नहीं है। मेरे पास केवल वास्तविक विजेट हैं।

मैं उन्हें कैसे हटा सकता हूं?

क्या मुझे कुछ याद आ रही है?

मैं उपयोग कर रहा हूँ:

अजगर 2.7.1
PyQt4 निष्क्रिय 1.8
विंडोज 7

उत्तर

12

takeItem() काम करना चाहिए:

for SelectedItem in self.ListDialog.ContentList.selectedItems(): 
    self.ListDialog.ContentList.takeItem(self.ListDialog.ContentList.row(SelectedItem)) 
+0

एक आकर्षण काम किया! मैंने देखा कि आम समाधान ले लिया गया था Item, लेकिन मैं आइटम विजेट को एक सूचकांक में परिवर्तित करने के बारे में अनिश्चित था। धन्यवाद! –

2

कि अजीब है वहाँ से QListWidget ... प्रयास करें आइटम हटाने के लिए कुछ सीधा रास्ता नहीं है इस:

listWidget = self.ListDialog.ContentList 
model = listWidget.model() 
for selectedItem in listWidget.selectedItems(): 
    qIndex = listWidget.indexFromItem(selectedItem) 
    print 'removing : %s' %model.data(qIndex).toString() 
    model.removeRow(qIndex.row()) 
+1

दरअसल वहाँ एक तरीका है 'takeItem' कहा जाता है (अन्य उत्तर देखें)। उस ने कहा, यह वास्तव में अजीब है कि इसे 'RemoveItem' नहीं कहा जाता है। – neuronet

5

ListWidget से किसी आइटम को हटाने से:

item = self.listWidget.takeItem(self.listWidget.currentRow()) 
item = None 
+0

मेरे लिए अच्छा काम करता है .... – Cholavendhan

+0

मेरे लिए भी काम करता है !!! –

+1

अगर कचरा "आइटम" किसी भी चर के लिए असाइन नहीं किया गया है तो कलेक्टर कचरा स्मृति को पुनः प्राप्त नहीं करना चाहिए? मुझे लगता है कि "takeItem()" को किसी भी चर के लिए अपना आउटपुट निर्दिष्ट किए बिना काम करना चाहिए और फिर उस चर को "कोई नहीं" पर सेट करना चाहिए। – nvd