2016-07-17 61 views
0

QListWidgetがあり、そこに文字列があります。文字列を選択すると、そのインデックス番号とテキストを表示したかったのです。しかし、問題は、複数のアイテムを選択すると、すべてのインデックスが表示されないということです。 1つしか表示されません。複数のアイテムが選択されている場合、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

このように '[] 'を印刷します。たとえば、 'Python、Ruby'をどうすれば印刷できますか? – GLHF

+0

テキストについては、[API of QListWidgetItem](http://pyqt.sourceforge.net/Docs/PyQt4/qlistwidgetitem.html)、特に['text()'](http://pyqt.sourceforge)を参照してください。インデックスには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()) 
関連する問題