Добрый день. Помогите, пожалуйста, найти причину вылетов программы. Я использую Python 3.4.4 и PyQt 4.11.4. Программа имеет интерфейс с QTableView, куда подгружаются данные из БД Sqlite и несколько чекбоксов, которые включают дополнительные колонки в таблице. Также по таймеру запускается поток, в котором выполняется парсинг сайта и сохранение информации в БД. Всё работает хорошо, если ничего не трогать. Если в момент запуска потока или когда во время потока парсится сайт быстро изменять размер главного окна (мышкой увеличивать и уменьшать размер), быстро скроллить таблицу (по вертикали или горизонтали), быстро включать/выключать чекбоксы, то программа просто крэшится. Если выполнять те же самые действия, только медленно, то все работает без проблем. Исключение - изменение размера окна: программа крэшэтся при любой скорости изменения размера, если в это время работает поток. Куда копать?
Код программы:
def check_connect():
try:
site_connect = HTTPConnection("test.ru")
site_connect.request("GET", "/")
site_connect.close()
except ConnectionRefusedError:
return False
except TimeoutError:
return False
except ConnectionError:
return False
else:
return True
def checkBox_db():
stateCB = main_window.checkBox_1.isChecked()
stateCB_2 = main_window.checkBox_2.isChecked()
stateCB_3 = main_window.checkBox_3.isChecked()
if stateCB is True and stateCB_2 is True and stateCB_3 is True:
DB_connect = QtSql.QSqlDatabase.addDatabase("QSQLITE")
DB_connect.setDatabaseName("database.db")
DB_connect.open()
cb_model = QtSql.QSqlQueryModel(parent=None)
cb_model.setQuery("SELECT * FROM table")
main_window.tableView.setModel(cb_model)
DB_connect.close()
...
class check_docs_cl(QtCore.QThread):
def __init__(self, parent=None):
QtCore.QThread.__init__(self, parent)
def run(self):
check_connect()
if check_connect():
'''парсинг сайта'''
class docsTimer(QtCore.QObject):
def __init__(self):
QtCore.QObject.__init__(self)
self.basictimer = QtCore.QBasicTimer()
self.basictimer.start(600000, self)
def timerEvent(self, QTimerEvent):
check_docs.start()
class main_cl(QtGui.QMainWindow):
def __init__(self):
super().__init__()
uic.loadUi("main.ui", self)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
main_window = main_cl()
check_docs = check_docs_cl()
main_window.checkBox_1.stateChanged.connect(checkBox_db)
main_window.checkBox_2.stateChanged.connect(checkBox_db)
main_window.checkBox_3.stateChanged.connect(checkBox_db)
check_connect()
if check_connect():
docs_timer = docsTimer()
sys.exit(app.exec_())