суббота, 24 апреля 2010 г.

PyQt: Генерация кода по ресурсу интерфейса

В подавляющем большинстве инструментов для создания GUI, которые мне доводилось использовать, для нормальной работы программы положено из ресурса некоторым образом сгенерировать код. Естественно, полученную рыбу надо наполнить прикладной логикой.

Веселуха начинается, когда возникает необходимость изменить ресурс. Путей при этом два: описания новых контролов ресурса добавлять в ранее сгенерированный код руками по образу и подобию существующих или понадеяться на корректную перегенерацию.

Метаданные sqlite3

Как выяснилось, у sqlite очень просто получить список существующих таблиц, индексов, представлений и триггеров.

Глюк стандартных SQL-моделей PyQt4

При написании простенькой базы данных (PyQt4+sqlite) наткнулся на неприятный глюк связки QSqlTableModel и QTableView: при добавлении во вьюху новых строк активна всегда только первая строка и в базу ничего не пишется.

Выяснилось, что PyQt ни при чем, проблему создавало еще одно соединение с базой средствами стандартного питоновского модуля sqlite3, использовавшееся вспомогательным функционалом. После перевода функционала на соединение средствами PyQt все заработало.

Глубоко копаться в причинах конфликта не стал, вероятно что-то с блокировками по умолчанию в разных реализациях, проще было избавиться от зоопарка соединений.