Форум сайта python.su
0
Вопрос конечно немного не сюда, он скорее относится к теме QT, но имеет несколько промежуточный характер, поэтому я опубликую его здесь. Значит в чем суть. Имеется таблица, с обработчиком(слотом) события(сигнала), изменения содержимого ячейки. Смысл обработчика таков - проверить совершен ли ввод в ячейку соответствующей строки, и если да, то дополнить не введенные нули. Суть в чем, все работает как нужно, за одним моментом - происходит RuntimeError, но не приводивший до поры до времени к крешу программы, теперь приводит. Вообще, если я правильно понял суть, происходит превышение лимита обработки прерывания от клавиатуры. Так как опытным путем удалось выяснить что slot_cellChange вызывается 1000 раз, на 1001 происходит сбой. Но как с этим бороться не имею представления.
self.connect(self.table, QtCore.SIGNAL('cellChanged (int, int)'), lambda row = 1: self.slot_cellChange(row)) def slot_cellChange(self, row): lit = self.field[row] if lit == 'Stock': it = self.table.item(row, 1) self.table.setItem(row, 1, QtGui.QTableWidgetItem(format(float(str(it.text())), ".3f")))
Офлайн
52
Как насчет использования поисковика? Вбиваете ошибку - ‘maximum recursion depth exceeded’ - на первой странице полно ответов.
Вкратце для лентяев: меняйте логику или поставьте sys.setrecursionlimit повыше.
RuntimeError: maximum recursion depth exceeded in cmp
происходит превышение лимита обработки прерывания от клавиатурыНадо бы подучить основы программирования и английский.
Отредактировано fata1ex (Июнь 17, 2012 13:57:07)
Офлайн
173
SerbisПричина не в этом.
Вообще, если я правильно понял суть, происходит превышение лимита обработки прерывания от клавиатуры.
RuntimeError: maximum recursion depth exceededЭто значит, что превышен лимит рекурсии, т.е. функция вызывает сама себя много раз:
def foo(): foo() foo()
self.table.blockSignals(True) # do something with table, like setItem self.table.setItem(...) self.table.blockSignals(False)
Отредактировано reclosedev (Июнь 17, 2012 14:00:23)
Офлайн
0
Спасибо, про рекурсию я понял почти сразу, а вот про то что можно сигналы от объектов блокировать, вот за это спасибо
Офлайн