从 qtreeview 获取当前选定的数据,而不是以前的
Get current selected data from qtreeview, not previous
我正在尝试从 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']
。它总是采用我之前选择的行,而不是当前行。谁能帮我看看是什么问题?
需要区分当前行和选中行,因为它们是2个不同的概念,比如一开始当前行是0,但是没有选中行。通常当用户与一行交互时(例如通过按下行中的一个项目)然后首先确定按下的行是当前行并且稍后它表明将要选择该行。
所以如果你想获得选定的行,那么你应该使用 selectionChanged
信号:
self.treeview.selectionModel().selectionChanged.connect(self.showSelectedRow)
我正在尝试从 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']
。它总是采用我之前选择的行,而不是当前行。谁能帮我看看是什么问题?
需要区分当前行和选中行,因为它们是2个不同的概念,比如一开始当前行是0,但是没有选中行。通常当用户与一行交互时(例如通过按下行中的一个项目)然后首先确定按下的行是当前行并且稍后它表明将要选择该行。
所以如果你想获得选定的行,那么你应该使用 selectionChanged
信号:
self.treeview.selectionModel().selectionChanged.connect(self.showSelectedRow)