Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PyQt4 QTableView中的选定项文本延迟一次单击_Python_Database_Pyqt4_Qtableview_Qsqltablemodel - Fatal编程技术网

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
,然后询问模型等。A
QModelIndex
有一个方便的方法,就是为了这个目的。此外,该信号将向您发送选定的索引,您不需要为此进行额外的工作。这使得您的代码非常简单:(注意:
getItem
方法不需要)

当在同一行中选择一个新列时,不会发生任何事情

这是因为您使用的是
currentRowChanged
信号。如果在同一行中选择一列,则不会触发该信号。您应该使用
currentChanged
信号。(并且,您应该使用)

而且,如果您只需要这些数据,您不需要这些东西来获取非代理
QModelIndex
,然后询问模型等。A
QModelIndex
有一个方便的方法,就是为了这个目的。此外,该信号将向您发送选定的索引,您不需要为此进行额外的工作。这使得您的代码非常简单:(注意:
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())