【问题标题】:Get current selected data from qtreeview, not previous从 qtreeview 获取当前选定的数据,而不是以前的
【发布时间】:2020-10-16 19:23:22
【问题描述】:

我正在尝试从 QTreeView 中读取选定的行。但是,我只能获取之前选择的数据。

例如:

from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import sys


class treeviewExample(QWidget):
    def __init__(self):
        super(treeviewExample, self).__init__()
        self.treeview = QTreeView(self)
        self.treemodel = QStandardItemModel(self)
        self.grid = QGridLayout()
        self.run()

    def run(self):
        self.setGeometry(200, 200, 200, 200)
        self.treeview.setModel(self.treemodel)
        self.fillData()

        self.treeview.selectionModel().currentRowChanged.connect(self.showSelectedRow)
        self.grid.addWidget(self.treeview, 0, 0, 2, 2)

    def fillData(self):
        item1 = QStandardItem("Item1")
        item2 = QStandardItem("Item2")
        item = (item1, item2)
        for row in item:
            row.setEditable(False)
        self.treemodel.appendRow(item)

        item3 = QStandardItem("Item3")
        item4 = QStandardItem("Item4")
        item = (item3, item4)
        for row in item:
            row.setEditable(False)
        self.treemodel.appendRow(item)

    @pyqtSlot()
    def showSelectedRow(self):
        indexes = self.treeview.selectedIndexes()
        items = []
        for index in indexes:
            items.append(self.treemodel.itemFromIndex(index))
        print([x.text() for x in items])


if __name__ == "__main__":
    app = QApplication(sys.argv)
    tree = treeviewExample()
    tree.show()
    sys.exit(app.exec_())

当我运行它并首先点击顶行然后点击底行时,我得到了这个:

[]
['Item1', 'Item2']

所以我选择了['Item3', 'Item4'],但程序打印出['Item1', 'Item1']。它总是采用我之前选择的行,而不是当前行。谁能帮我找出问题所在?

【问题讨论】:

    标签: python python-3.x pyqt pyqt5


    【解决方案1】:

    有必要区分当前行和选定行,因为它们是2个不同的概念,例如在开始时当前行为0但没有选定行。通常,当用户与行交互时(例如通过按下行中的项目),首先确定按下的行是当前行,稍后会指示该行将被选中。

    因此,如果您想获得选定的行,那么您应该使用selectionChanged 信号:

    self.treeview.selectionModel().selectionChanged.connect(self.showSelectedRow)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 2021-09-29
      • 1970-01-01
      • 2018-05-17
      • 2020-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多