2016-07-17 12 views
0

QListWidget을 가지고 있는데 거기에 문자열이 있으면 문자열을 선택할 때 색인 번호와 텍스트를 표시하려고합니다. 하지만 문제는 하나 이상의 항목을 선택하면 모든 색인이 표시되지 않는다는 것입니다. 하나만 표시합니다.두 개 이상의 항목이 선택된 경우 QListWidget에 두 개 이상의 항목을 인쇄하는 방법

from PyQt5.QtWidgets import * 
import sys 

class Pencere(QWidget): 
    def __init__(self): 
     super().__init__() 
     self.layout = QVBoxLayout(self) 

     self.listwidget = QListWidget(self) 
     self.listwidget.addItems(["Python","Ruby","Go","Perl"]) 
     self.listwidget.setSelectionMode(QAbstractItemView.MultiSelection) 


     self.buton = QPushButton(self) 
     self.buton.setText("Ok") 
     self.buton.clicked.connect(self.but) 

     self.layout.addWidget(self.listwidget) 
     self.layout.addWidget(self.buton) 

    def but(self): 
     print (self.listwidget.currentRow()+1) 


uygulama = QApplication(sys.argv) 
pencere = Pencere() 
pencere.show() 
uygulama.exec_() 

두 개 이상의 항목을 선택하면 어떻게하면 모든 항목 이름과 색인을 표시 할 수 있습니까?

답변

0

QListWidget의 selectedItems() 함수를 사용해야합니다.이 함수는 목록을 반환합니다. currentRow()은 단일 정수만 반환하며 단일 선택 인스턴스에서만 사용하도록되어 있습니다.

QListWidgetItems 목록이 있으면 각 항목에 text() 함수를 사용하여 텍스트를 가져올 수 있습니다.

인덱스를 얻기 약간 더 복잡하다, 당신은 QListWidget.indexFromItem()를 사용하여 원래 QListWidgetItem에서 QModelIndex 개체를 얻을 후 QModelIndex.row() 기능을 사용해야합니다.


출처 : http://pyqt.sourceforge.net/Docs/PyQt4/qlistwidget.html#selectedItems
참고 : 태그에 PyQt5을 지정하지만, QListWidget의 API는이 경우에 동일하게 유지; 확인하려면 C++ API docs을 참조하십시오.

+0

으로 해결하지만 어떻게 그 방법으로 선택한 항목의 인덱스와 문자열을 인쇄 할 수 있습니까? – GLHF

+0

이렇게 ['<0x0DEDEA0>에 '를 인쇄합니다. 예를 들어'Python, Ruby'를 어떻게 인쇄 할 수 있습니까? – GLHF

+0

텍스트의 경우 [QListWidgetItem의 API] (http://pyqt.sourceforge.net/Docs/PyQt4/qlistwidgetitem.html), 특히 ['text()'] (http : //pyqt.sourceforge. net/Docs/PyQt4/qlistwidgetitem.html # text) 함수를 사용하고 색인의 경우 QListWidget의 ['indexFromItem()'] (http://pyqt.sourceforge.net/Docs/PyQt4/qlistwidget.html#indexFromItem) 및 그것의 각각의 ['row()'] (http://pyqt.sourceforge.net/Docs/PyQt4/qmodelindex.html#row) 함수. –

0

나는이

def but(self): 
    x = self.listwidget.selectedItems() 
    for y in x: 
     print (y.text())