Как получить выбранный элемент в соответствующих элементах представления списка с помощью pyqt4 - PullRequest
0 голосов
/ 20 марта 2019

Вот мой пример кода. Я изучаю методы представления списка, я уже опубликовал один вопрос, но у меня есть небольшое сомнение в моей программе. В моей программе после "fliter" я получаю совпадающие элементы слова вчто я хочу выбрать выбранный элемент, используя клавишу ввода, но он печатает первый элемент после выбора. Я не хочу печатать первый элемент из соответствующего списка. Может ли кто-нибудь, пожалуйста, помогите мне. Заранее спасибо.

ниже приведен мой код:

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class Dialog(QDialog):
    def __init__(self, parent=None):
        super(Dialog, self).__init__(parent=parent)
        vLayout = QVBoxLayout(self)
        hLayout = QHBoxLayout()

        self.lineEdit = QLineEdit(self)
        hLayout.addWidget(self.lineEdit)

        self.filter = QPushButton("filter", self)
        hLayout.addWidget(self.filter)
        self.filter.clicked.connect(self.filterClicked)

        self.list = QListView(self)

        vLayout.addLayout(hLayout)
        vLayout.addWidget(self.list)

        self.model = QStandardItemModel(self.list)

        codes = [
            'windows',
            'windows xp',
            'windows7',
            'hai',
            'habit',
            'hack',
            'good'
        ]
        for code in codes:
            item = QStandardItem(code)
            self.model.appendRow(item)
        self.list.setModel(self.model)
        shorcut=QtGui.QShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Return), self)
        shorcut.activated.connect(self.on_enter_pressed)
    @QtCore.pyqtSlot()
    def on_enter_pressed(self):
        if len(self.lineEdit.text())>0:
            self.filterClicked()

    def filterClicked(self):
        filter_text = str(self.lineEdit.text()).lower()
        for row in range(self.model.rowCount()):
            if filter_text in str(self.model.item(row).text()).lower():
                self.list.setRowHidden(row, False)
                self.list.setFocus()
            else:
                self.list.setRowHidden(row, True)

        ix = self.list.selectionModel().selectedIndexes()
        #here if i mentioned self.list.selectionModel().currentIndex() means it is automatically printing the first item in List_View
        # i dont want to print first item ...after slecting the item in list view i will press enter key then only i want to print the selected item name
        print ix.data()
if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    w = Dialog()
    w.show()
    sys.exit(app.exec_())

1 Ответ

0 голосов
/ 20 марта 2019

наконец-то я получил этот ответ ... спасибо, сэр, я отсылаю все ваши предыдущие ответы, относящиеся к представлению списка .. Большое вам спасибо ..

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class Dialog(QDialog):
    def __init__(self, parent=None):
        super(Dialog, self).__init__(parent=parent)
        vLayout = QVBoxLayout(self)
        hLayout = QHBoxLayout()

        self.lineEdit = QLineEdit(self)
        hLayout.addWidget(self.lineEdit)

        self.filter = QPushButton("filter", self)
        hLayout.addWidget(self.filter)
        self.filter.clicked.connect(self.filterClicked)

        self.list = QListView(self)

        vLayout.addLayout(hLayout)
        vLayout.addWidget(self.list)

        self.model = QStandardItemModel(self.list)

        codes = [
            'windows',
            'windows xp',
            'windows7',
            'hai',
            'habit',
            'hack',
            'good'
        ]
        for code in codes:
            item = QStandardItem(code)
            self.model.appendRow(item)
        self.list.setModel(self.model)
        shorcut=QtGui.QShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Return), self)
        shorcut.activated.connect(self.on_enter_pressed)
    @QtCore.pyqtSlot()
    def on_enter_pressed(self):
        if len(self.lineEdit.text())>0:
            self.filterClicked()

    def filterClicked(self):
        filter_text = str(self.lineEdit.text()).lower()
        for row in range(self.model.rowCount()):
            if filter_text in str(self.model.item(row).text()).lower():
                self.list.setRowHidden(row, False)
                self.list.setFocus()
            else:
                self.list.setRowHidden(row, True)
        indexes =  self.list.selectionModel().selectedIndexes()
        for index in indexes:
            print index.data().toString()


if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    w = Dialog()
    w.show()
    sys.exit(app.exec_())
...