【发布时间】:2011-05-18 11:07:13
【问题描述】:
我正在使用 PyQt 创建一个 GUI 应用程序。在继承自 QTableView 的视图中,需要检测用户双击一行时选择的行。该表有排序,但没有编辑。
我该怎么做?
注意 - 尝试了 doubleClicked(int) 信号。它是由鼠标按钮发出的,而不是由数据单元发出的,因此它从未被触发。 :(
伊恩
【问题讨论】:
我正在使用 PyQt 创建一个 GUI 应用程序。在继承自 QTableView 的视图中,需要检测用户双击一行时选择的行。该表有排序,但没有编辑。
我该怎么做?
注意 - 尝试了 doubleClicked(int) 信号。它是由鼠标按钮发出的,而不是由数据单元发出的,因此它从未被触发。 :(
伊恩
【问题讨论】:
我不明白。 QTableView 的 doubleClicked 信号有签名
void doubleClicked ( const QModelIndex & index )
如果您连接该信号,您应该获得正确的 QModelIndex。
【讨论】:
不再需要使用信号:
self.your_table.doubleClicked.connect(your_function)
"doubleClicked" 继承自 QAbstractItemView。
【讨论】:
一旦你有了modelIndex,(来自上面弗兰克的评论)你可以用它来找到哪个单元格被双击了。
def slotDoubleClicked(self, mi):
row = mi.row()
column = mi.column()
然后您可以使用这些 row 和 col 值通过 table.setItem(row, column, newdata) 或其他表格方法访问表格
【讨论】:
就像@regomodo 所说,您可以通过以下方式简单地将您的功能连接到双击:
self.your_table.doubleClicked.connect(your_function)
那么,如果你想知道用户双击了哪一行,你可以使用下面的代码:
for idx in self.your_table.selectionModel().selectedIndexes():
row_number = idx.row()
column_number = idx.column()
它将返回一个与行号或列号对应的整数。 当双击删除先前的选择时,将始终只有一个值。
如果您将函数链接到按钮或其他信号,您可以收到包含用户选择的多个元素的列表。
例如,您可以使用以下代码轻松检索所有选定行的列表:
rows = []
for idx in self.your_table.selectionModel().selectedIndexes():
rows.append(idx.row())
rows = list(set(rows))
这将返回所有选定行的列表(set 函数还将删除所有重复项)。
干杯!
【讨论】: