Я протестировал QTableview в pyside6, используя приведенный ниже код. Когда QTableview получает фокус и мы сворачиваем окно, когда мы восстанавливаем окно, процедура data() может быть вызвана несколько раз с ролью 10. Я проверил, что роль 10 предназначена для проверки состояния флажка в таблице. Я не использую флажки в таблице, и процесс вызова data(), если в QTableview хранится много записей, создаст ощущение, что программа зависает/не отвечает на некоторое время.
Однако этот инцидент является случайным и непоследовательным. Иногда зацикливается, иногда ведет себя нормально.
Кто-нибудь еще сталкивался с тем же? Есть ли способ это исправить?
from PySide6.QtWidgets import QApplication, QMainWindow, QTableView, QStyleFactory
from PySide6.QtCore import QAbstractTableModel, Qt
import numpy as np
class MyTableModel(QAbstractTableModel):
def __init__(self, data):
super().__init__()
self._data = data
def rowCount(self, parent=None):
return len(self._data)
def columnCount(self, parent=None):
return len(self._data[0]) if self._data else 0
def data(self, index, role=Qt.DisplayRole):
print(index.row(), role)
if role == Qt.DisplayRole:
return self._data[index.row()][index.column()]
return None
def headerData(self, section, orientation, role=Qt.DisplayRole):
if role == Qt.DisplayRole and orientation == Qt.Horizontal:
return f"Column {section + 1}"
return None
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowFlags(Qt.Widget)
self.resize(800, 600)
self.setWindowTitle("QTableView on pyside6 looping data() make slow")
self.table_view = QTableView()
data = [["Item A1", "Longer Item B1", "Item C1"] for _ in range(6000)]
self.model = MyTableModel(data)
self.table_view.setModel(self.model)
self.setCentralWidget(self.table_view)
if __name__ == "__main__":
app = QApplication([])
app.setStyle(QStyleFactory.create("Fusion"))
window = MainWindow()
window.setWindowFlags(Qt.Window)
window.show()
app.exec()
Подробнее здесь: https://stackoverflow.com/questions/798 ... -not-be-vi
QTableview в PySide6 несколько раз вызывает data() для строк, которые не должны быть видны. ⇐ Python
Программы на Python
1764162239
Anonymous
Я протестировал QTableview в pyside6, используя приведенный ниже код. Когда QTableview получает фокус и мы сворачиваем окно, когда мы восстанавливаем окно, процедура data() может быть вызвана несколько раз с ролью 10. Я проверил, что роль 10 предназначена для проверки состояния флажка в таблице. Я не использую флажки в таблице, и процесс вызова data(), если в QTableview хранится много записей, создаст ощущение, что программа зависает/не отвечает на некоторое время.
Однако этот инцидент является случайным и непоследовательным. Иногда зацикливается, иногда ведет себя нормально.
Кто-нибудь еще сталкивался с тем же? Есть ли способ это исправить?
from PySide6.QtWidgets import QApplication, QMainWindow, QTableView, QStyleFactory
from PySide6.QtCore import QAbstractTableModel, Qt
import numpy as np
class MyTableModel(QAbstractTableModel):
def __init__(self, data):
super().__init__()
self._data = data
def rowCount(self, parent=None):
return len(self._data)
def columnCount(self, parent=None):
return len(self._data[0]) if self._data else 0
def data(self, index, role=Qt.DisplayRole):
print(index.row(), role)
if role == Qt.DisplayRole:
return self._data[index.row()][index.column()]
return None
def headerData(self, section, orientation, role=Qt.DisplayRole):
if role == Qt.DisplayRole and orientation == Qt.Horizontal:
return f"Column {section + 1}"
return None
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowFlags(Qt.Widget)
self.resize(800, 600)
self.setWindowTitle("QTableView on pyside6 looping data() make slow")
self.table_view = QTableView()
data = [["Item A1", "Longer Item B1", "Item C1"] for _ in range(6000)]
self.model = MyTableModel(data)
self.table_view.setModel(self.model)
self.setCentralWidget(self.table_view)
if __name__ == "__main__":
app = QApplication([])
app.setStyle(QStyleFactory.create("Fusion"))
window = MainWindow()
window.setWindowFlags(Qt.Window)
window.show()
app.exec()
Подробнее здесь: [url]https://stackoverflow.com/questions/79830372/qtableview-in-pyside6-calls-data-multiple-times-for-rows-that-should-not-be-vi[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия