Написал как-то на PyQT4 GUI для работы с простенькой базой данных (телефонный справочник). Но не могу понять, как правильно реализовать одну функцию. Надо, чтобы при нажатии кнопки "Поиск" эта кнопка становилась неактивной на время выполнения запроса, а в строке статуса отображалось сообщение "Выполняется поиск". Казалось бы, всё просто. Но вот такой код на практике не работает:class MainWindow(QtGui.QMainWindow):
def __init__(self, Найдено записей: ')
self.search = QtGui.QPushButton(u'Поиск')
[...]
self.connect(self.search, QtCore.SIGNAL("clicked()"), self.dosearch)
def dosearch(self):
self.search.setEnabled(False)
self.statusBar().showMessage(u'Выполняется поиск...')
con = sqlite.connect(pathtobase)
cur = con.cursor()
[...тут пропустим код формирования запроса в querystring...]
if querystring:
select = "select * from phones where " + querystring + " order by number"
cur.execute(select)
results = cur.fetchall()
self.statusBar().showMessage(u'Найдено записей: %s' % len(results))
if not results:
results = [('', '', '', '', '')]
else:
results = [('', '', '', '', '')]
self.statusBar().showMessage(u'Найдено записей: 0 (некорректный запрос)')
for row in range(0, len(results)):
results[row] = fixnumber(results[row][0]), results[row][1].title(), results[row][2].title(), results[row][3], results[row][4]
tablemodel = PhoneTableModel(results, self.headers, self)
self.resultTable.setModel(tablemodel)
con.close()
self.search.setEnabled(True)
[...]
Не работает ни self.search.setEnabled(False), ни self.statusBar().showMessage(u'Выполняется поиск...') - виджеты не обновляются. Если, конечно, не допустить ошибку в коде перед выполнением запроса к базе - тогда выполнение программы останавливается и виджеты находятся в состоянии 'кнопка неактивна', 'в строке статуса - "Выполняется запрос..."'.А как бы правильно сделать так, чтобы запрос к базе выполнялся только после того, как виджеты на форме действительно обновились?UPDATE: проблема решается с помощью QCoreApplication::processEvents()