Как получить элемент в виде списка с помощью клавиши enter

#python-2.7 #pyqt4

#python-2.7 #pyqt4

Вопрос:

В моей программе я хочу использовать событие нажатия клавиши в виде списка.Когда я нажимаю клавишу ввода, печатается только мой выделенный текст..Кто-нибудь, пожалуйста, может сказать мне, как использовать событие нажатия клавиши для просмотра списка.Я пробовал с installEventFilter, но этот метод показывает ошибку, не связанную с типом. Ниже приведен мой код:

 import sys
from PyQt4 import QtCore,QtGui
class List_View(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(List_View, self).__init__(parent)
        self.listview = QtGui.QListView()
        model = QtGui.QStandardItemModel(self.listview)
        for i in ['linux', 'windows', 'mac os']:
            model.appendRow(QtGui.QStandardItem(i))
        self.listview.setModel(model)
        self.listview.entered.connect(self.add_items)
        widget = QtGui.QWidget()
        self.setCentralWidget(widget)
        vlay = QtGui.QVBoxLayout(widget)
        vlay.addWidget(self.listview)
        self.resize(400, 200)
    def add_items(self):
      pass #here i need to print particular item in list view

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

Комментарии:

1. Вы хотите, чтобы выбранный элемент QListView печатался при нажатии клавиши ввода?

2. да, сэр .. но здесь это не работает

Ответ №1:

Я думаю, вы не читали документы о введенном сигнале или вы его не поняли, этот сигнал срабатывает только тогда, когда мышь находится на элементе, но для этого вы должны активировать отслеживание мыши с помощью self.listview.setMouseTracking(True)

Простое решение — использовать QShortcut :

 import sys
from PyQt4 import QtCore,QtGui

class List_View(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(List_View, self).__init__(parent)

        shorcut = QtGui.QShortcut(
            QtGui.QKeySequence(QtCore.Qt.Key_Return),
            self
        )
        shorcut.activated.connect(self.on_enter_pressed)

        self.listview = QtGui.QListView()
        model = QtGui.QStandardItemModel(self.listview)
        for i in ['linux', 'windows', 'mac os']:
            model.appendRow(QtGui.QStandardItem(i))
        self.listview.setModel(model)

        widget = QtGui.QWidget()
        self.setCentralWidget(widget)
        vlay = QtGui.QVBoxLayout(widget)
        vlay.addWidget(self.listview)
        self.resize(400, 200)

    @QtCore.pyqtSlot()
    def on_enter_pressed(self):
        print("enter press")
        ix = self.listview.selectionModel().currentIndex()
        print(ix.data())

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