#python #pyqt5 #qtablewidget #scrollto
#python #pyqt5 #qtablewidget #scrollto
Вопрос:
борюсь с проблемой:
Я использую эту функцию для начального представления положения в центре большой таблицы.
Путем создания объекта QTableWidget, когда приложение только загружается, и заполнения таблицы новыми данными (включая новые столбцы / строки) перед ее отображением: (нажатием кнопки)
...
self.table.scrollToItem(self.tabl.item(central_row, 0), QAbstractItemView.PositionAtCenter)
self.table_ticker.scrollToItem(self.table.selectRow(central_row), QAbstractItemView.PositionAtCenter)
...
Итак, у меня есть 2 проблемы, которые я не могу понять:
-
позиционирование не работает корректно при первом вызове, но только со 2-го раза (нажатием кнопки) или более. Иногда и в первый раз видна только пара столбцов. Я предполагаю, что QTableWidget требует некоторого внутреннего обновления etc, я попробовал это:
self.table.updateGeometry() self.table.update() self.table.updateEditorGeometries()
но это не помогает.
-
Мне не нужно делать какой-либо выбор, подобный приведенному выше:
self.table.selectRow(central_row)
но без этого трюка позиционирование вообще не работает. Конечно, я могу выполнить clearSelection, но есть ли другие способы сделать это?
Спасибо.
Комментарии:
1. Центрирование на представлении элемента во время инициализации — это то, что редко работает, поскольку в этот момент виджеты еще не сопоставлены, и их область может еще долго меняться, пока окно не будет окончательно показано. Вы пробовали использовать таймер одиночной съемки?
QTimer.singleshot(0, self.functionThatCenters)
(обратите внимание, что все этиupdate*()
вызовы совершенно не нужны, если виджет еще не показан)2. спасибо за идею, self.timer.timeout.connect(лямбда: self. PosAtCenter ()) решил все.