Недавно писал про with в Python'e и сам же наступил на связанные с ним грабли: некоторые исключения при таинственных обстоятельствах исчезали. Кроме with'а, подозреваемых не было, но следствие показало, что сам по себе оператор в этом не виноват. Причина была в менеджере контекста, функция __exit__ которого всегда возвращала True и тем самым подавлял все возможные исключения.
понедельник, 26 января 2009 г.
четверг, 22 января 2009 г.
четверг, 15 января 2009 г.
The History of Python
Гвидо ван Россум, тот который автор Питона, начал вести блог об истории Питона, который так и называется The History of Python.
Автор: sash_ko на 10:17 0 коммент.
Ярлыки: python
среда, 14 января 2009 г.
Трабла setHidden у QTreeWidgetItem
Суть проблемы
Есть дерево (QTreeWidget) элементов (QTreeWidgetItem). По событию некоторые элементы нужно скрыть, а скрытые отобразить, для чего используется функция setHidden у QTreeWidgetItem. После фильтрации это все сортируется:def add_subitems(self, root_item):
'''Добавить элементы к корневому элементу'''
def add(text, hide=False):
sub_item = QtGui.QTreeWidgetItem(root_item)
sub_item.setText(0, text)
sub_item.setHidden(hide)
map(lambda val: add(*val), ( ('one',),
('two', True),
('three',) ))
def update_subitems(self, root_item):
'''Обновить под-элементы - скрыть или отобразить'''
for index in range(root_item.childCount()):
item = self.root_item.child(index)
# для упрощения скрываются видимые элементы,
# а скрытые отображаются
item.setHidden(not item.isHidden())
self.treeWidget.sortItems(0, QtCore.Qt.AscendingOrder)
Если update_subitems вызывается когда окно скрыто (свернуто в трей), часть вызовов setHidden отрабатывается не правильно и при восстановлении окна из трея пользователь видит не то, что должен видеть. Если убрать сортировку или не скрывать окно - все работает как надо.
Решение
Единственное решение, которое я нашел - отлавливать момент, когда окно отображается (QShowEvent) и обновлять дерево еще раз:def event(self, ev):
if ev.type()==QtCore.QEvent.Show:
#....
self.update_subitems(root_item)
Автор: sash_ko на 18:00 0 коммент.
вторник, 6 января 2009 г.
Меньше кодить, больше думать
Джордж Сантаяне: Фанатизм состоит в удвоении Вашего усилия, когда Вы забыли свою цель
Первый пост в этом году будет обещанием самому себе - не писать ни строки кода пока не будет до конца ясно зачем это надо. Под этим я имею ввиду, что каждая задача должна разбиваться на подзадачи (строки кода) только когда понятна сама задача (зачем это надо). Делать наоборот - на ходу придумывать подзадачи и подгонять их под конкретную задачу - пустая трата времени и источник ошибок.
Автор: sash_ko на 11:36 3 коммент.
Ярлыки: Программизм