Python PyQt4 QTableView中的选定项文本延迟一次单击
我正在使用Python PyQt4 QTableView中的选定项文本延迟一次单击,python,database,pyqt4,qtableview,qsqltablemodel,Python,Database,Pyqt4,Qtableview,Qsqltablemodel,我正在使用QTableView来显示QSqlTableModel的内容,同时使用QSortFilterProxyModel来过滤记录。在下面的代码中,我成功地获得了当用户单击单元格时要显示的选定文本(无论是否应用了过滤器)。但是,它总是在后面单击一次,开始后的第一次单击会导致从空列表中弹出索引器:当在同一行中选择新列时,不会发生任何事情 我尝试在初始化表之后选择索引,但似乎什么都没做。我不知道下一步该做什么 class TableViewer(QtGui.QWidget): self.model
QTableView
来显示QSqlTableModel
的内容,同时使用QSortFilterProxyModel
来过滤记录。在下面的代码中,我成功地获得了当用户单击单元格时要显示的选定文本(无论是否应用了过滤器)。但是,它总是在后面单击一次,开始后的第一次单击会导致从空列表中弹出索引器:当在同一行中选择新列时,不会发生任何事情
我尝试在初始化表之后选择索引,但似乎什么都没做。我不知道下一步该做什么
class TableViewer(QtGui.QWidget):
self.model=QSqlTableModel()
self._proxyModel=QtGui.QSortFilterProxyModel()
self.\u proxyModel.setSourceModel(self.model)
self.tv=QTableView()
self.tv.setModel(self.\u proxyModel)
''可调用筛选器-传入字符串以筛选与字符串不匹配的所有内容''
QtCore.QObject.connect(self.textEditFilterBox,QtCore.SIGNAL(“textChanged(QString)”),self.\u proxyModel.setFilterRegExp)
def getItem(自身):
''重新运行所选项目''的项目文本'
index=self.selectionModel.selectedIndex().pop()
如果index.isValid():
行=索引。行()
column=index.column()
model=index.model()
如果hasattr(模型“mapToSource”):
#代理模型
modelIndex=model.mapToSource(索引)
打印(modelIndex.row(),modelIndex.column())
返回self.model.record(modeleindex.row()).field(modeleindex.column()).value().toString()
返回self.model.record(行).field(列).value().toString()
类主窗口(QtGui.QMainWindow):
#初始化TableViewer
self.tblViewer.connect(self.tblViewer.tv.selectionModel(),
信号((“currentRowChanged(QModelIndex,QModelIndex)”),
自。tblItemChanged)
def tblItemChanged(自,索引):
''显示所选项目的文本''
text=self.tblViewer.getItem()
打印(文本)
当在同一行中选择一个新列时,不会发生任何事情
这是因为您使用的是currentRowChanged
信号。如果在同一行中选择一列,则不会触发该信号。您应该使用currentChanged
信号。(并且,您应该使用)
而且,如果您只需要这些数据,您不需要这些东西来获取非代理QModelIndex
,然后询问模型等。AQModelIndex
有一个方便的方法,就是为了这个目的。此外,该信号将向您发送选定的索引,您不需要为此进行额外的工作。这使得您的代码非常简单:(注意:getItem
方法不需要)
当在同一行中选择一个新列时,不会发生任何事情
这是因为您使用的是currentRowChanged
信号。如果在同一行中选择一列,则不会触发该信号。您应该使用currentChanged
信号。(并且,您应该使用)
而且,如果您只需要这些数据,您不需要这些东西来获取非代理QModelIndex
,然后询问模型等。AQModelIndex
有一个方便的方法,就是为了这个目的。此外,该信号将向您发送选定的索引,您不需要为此进行额外的工作。这使得您的代码非常简单:(注意:getItem
方法不需要)
简单多了,效果很好,谢谢。(我不知道新的款式,看起来更干净了,再次感谢。)更简单,工作完美,谢谢。(我不知道新款式,看起来更干净,再次感谢。)
class MainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
#initialize TableViewer
self.tblViewer.tv.selectionModel().currentChanged.connect(self.tblItemChanged)
def tblItemChanged(self, current, previous):
'''display text of selected item '''
# `data` defaults to DisplayRole, e.g. the text that is displayed
print(current.data().toString())