如何检测QTableView中的双击

发布于 2024-10-05 18:51:28 字数 180 浏览 1 评论 0原文

我正在使用 PyQt 创建 GUI 应用程序。在继承自 QTableView 的视图中,需要检测用户双击行时选择的行。该表可以排序,但不能编辑。

我该怎么做?

注意 - 尝试了 doubleClicked(int) 信号。它是由鼠标按钮发出的,而不是由数据单元发出的,因此它从未被触发。 :(

伊恩

I'm using PyQt to create a GUI application. In a view inherited from QTableView, need to detect the row the user has selected when they double click a row. The table has sorting, but no editing.

How do I do it?

Note - tried the doubleClicked(int) signal. It is emitted by mouse buttons, not by data cells, so it was never fired. :(

Ian

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

云巢 2024-10-12 18:51:28

我不明白。
QTableView 的 doubleClicked 信号具有签名

void doubleClicked ( const QModelIndex & index )

如果连接该信号,您应该获得正确的 QModelIndex。

I dont understand.
The doubleClicked signal of the QTableView has the signature

void doubleClicked ( const QModelIndex & index )

If you connect that signal you should obtain the correct QModelIndex.

绝情姑娘 2024-10-12 18:51:28

不再需要使用信号:

self.your_table.doubleClicked.connect(your_function)

“doubleClicked”继承自 QAbstractItemView。

No need to use SIGNALs anymore:

self.your_table.doubleClicked.connect(your_function)

"doubleClicked" being inherited from QAbstractItemView.

﹉夏雨初晴づ 2024-10-12 18:51:28

一旦你有了 modelIndex(来自上面 Frank 的评论),你就可以用它来查找双击了哪个单元格。

def slotDoubleClicked(self, mi):
    row = mi.row()
    column = mi.column()

然后,您可以使用这些 row 和 col 值通过 table.setItem(row, column, newdata) 或其他表方法访问表

Once you have the modelIndex, (from Frank's comment above) you can use it to find which cell was double clicked.

def slotDoubleClicked(self, mi):
    row = mi.row()
    column = mi.column()

You then can use these row and col values to access the table with table.setItem(row, column, newdata) or other table method

巡山小妖精 2024-10-12 18:51:28

就像@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 函数还将删除任何重复项)。

干杯!

Like @regomodo said, you can simply connect your function to the double click via:

self.your_table.doubleClicked.connect(your_function)

Then, if you want to know on which row the user double clicked, you can use the following code:

for idx in self.your_table.selectionModel().selectedIndexes():
        row_number = idx.row()
        column_number = idx.column()

It will return an integer corresponding to the row or the column number.
There will always only be a single value as the double click remove the previous selection.

If you link your function to a push button or another signal, you can receive a list containing multiple elements selected by the user.

For example, you can easily retrieve a list of all selected rows using this code:

rows = []
for idx in self.your_table.selectionModel().selectedIndexes():
    rows.append(idx.row())
rows = list(set(rows))

This will return a list of all selected rows (The set function will also remove any duplicates).

Cheers!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文