У меня есть главное окно PyQt5, которое я создал с помощью Qt Designer.
Это окно должно сканировать сайт и отображать ссылки для сканирования в TreeView, как только они найдены.
Яв состоянии сделать это путем создания модели, QStandardItemModel
каждый раз, когда сканируется новая ссылка, добавляются все ссылки на модель, а затем задается модель дерева с TreeView.setModel(model)
, а затем я вызываю QtWidgets.qApp.processEvents()
, поэтомуокно обновлено.В то время как программное обеспечение сканирует сайт, окно не реагирует на взаимодействия с пользователем, пока не будет выполнено QtWidgets.qApp.processEvents()
.
Как я могу обновить TreeView с помощью последней ссылки для обхода, и при этом мое окно может быть недоступно во время процесса сканирования?
Вот мой код
def start(self):
## start crawling
self.populate_tree(crawled_links)
def populate_tree(self, links):
data = []
for index in links:
item = (links[index]['from'], [])
for link in links[index]['url']:
item[1].append((link, []))
data.append(item)
model = QtGui.QStandardItemModel()
self.__add_items(model, data)
self.treeView.setModel(model)
self.treeView.expandAll()
self.treeView.scrollToBottom()
self.treeView.setHeaderHidden(True)
QtWidgets.qApp.processEvents()
def __add_items(self, model, data):
for text, children in data:
item = QtGui.QStandardItem(text)
model.appendRow(item)
if children:
self.__add_items(item, children)
Если это поможет, список crawled_links
выглядит так:
crawled_links = {
0:{
'url': {
'one.html',
'three.html'
},
'from':
'site1.com'
},
1:{
'url': {
'two.html'
},
'from':
'site1.com'
}
}