Как обнаружить двойной клик в QTableView - PullRequest
7 голосов
/ 01 декабря 2010

Я использую PyQt для создания приложения с графическим интерфейсом.В представлении, унаследованном от QTableView, необходимо определить строку, выбранную пользователем, когда он дважды щелкает строку.В таблице есть сортировка, но нет редактирования.

Как мне это сделать?

Примечание - пробовал сигнал doubleClicked (int).Он излучается кнопками мыши, а не ячейками данных, поэтому он никогда не срабатывал.:(

Ян

Ответы [ 4 ]

16 голосов
/ 01 декабря 2010

Я не понимаю. Сигнал doubleClicked QTableView имеет подпись

void doubleClicked ( const QModelIndex & index )

Если вы подключите этот сигнал, вы должны получить правильный QModelIndex.

5 голосов
/ 07 декабря 2010

Больше не нужно использовать СИГНАЛЫ:

self.your_table.doubleClicked.connect(your_function)

doubleClicked наследуется от QAbstractItemView.

3 голосов
/ 02 сентября 2011

Когда у вас есть modelIndex, (из комментария Фрэнка выше) вы можете использовать его, чтобы найти ячейку, по которой дважды щелкнули.

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

Затем вы можете использовать эти значения строки и столбца для доступа к таблице с помощью table.setItem (строка, столбец, новые данные) или другого метода таблицы

1 голос
/ 11 августа 2018

Как сказал @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 также удалит все дубликаты).

ура!

...