【问题标题】:How to get the item in list view using with enter key如何使用回车键获取列表视图中的项目
【发布时间】:2019-03-20 12:18:31
【问题描述】:

在我的程序中,我想在列表视图中使用按键事件。当我按下回车键时,只会打印我选择的文本。谁能告诉我如何使用按键事件进行列表视图。我试过了使用 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_())

【问题讨论】:

  • 是否要在按下回车键时打印QListView的选中项?
  • 是的,先生..但在这里它不起作用

标签: python-2.7 pyqt4


【解决方案1】:

我认为您没有阅读过 entered 信号的文档或者您没有理解它,该信号仅在鼠标在项目上时触发,但为此您必须使用 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_())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多