2010-02-23 5 views
3

Я новичок в PyQt и Qt Designer, и я пытаюсь создать простой метод для связывания qWidgets с таблицами и столбцами в базе данных SQLite. Моя идея заключалась в том, чтобы пометить каждый qWidget в дизайнере двумя настраиваемыми свойствами, одним из которых является имя таблицы, а другое - имя столбца. Позже я использовал информацию, предоставленную разработчиком, для создания моего собственного класса, который создает связь между qwidets и базой данных SQLite.Возможно ли получить доступ к пользовательским свойствам из QT Designer после преобразования в python?

Добавление пользовательских свойств в Designer, кажется, работает нормально, однако код для этих пользовательских свойств не генерируется при преобразовании xml конструктора в python (с использованием UIC). Кто-нибудь сделал это успешно? Возможно, есть лучший способ сделать это?

Спасибо,

Эрик

ответ

0

Заканчивать this article Эрик. В частности, посмотрите раздел «Создание плагина». У River Bank Computing есть еще один отличный PyQt reference.

EDIT: Я читаю больше, и я не могу найти способ сделать это автоматически для вас. Если у вас все в порядке с добавлением динамических свойств во время выполнения, а не во время разработки, вы можете достичь того же конечного результата. Here - это объяснение метода setProperty() в QObject, из которого наследуется QWidget.

Если это не сработает для вас, то, похоже, вам будет лучше идти с менее общим подходом. Вместо использования общего QWidget вы можете использовать собственный класс, полученный из QSqlTableModel, для отслеживания информации о вашем подключении. Другой способ - просто использовать QTableView и самостоятельно выполнять запросы для заполнения данных. Here и here - статьи о базах данных в Qt. Вы могли бы вдохновить новый дизайн от одного из них.

+0

Hey Ryan, Спасибо за указатели. Похоже, первая статья предполагает, что мне нужно создать собственный виджет, чтобы добавить свойства. Правильно ли я понимаю это? Когда в дизайнере QT редактор свойств позволяет вам создать свойство Dynamic на виджете и присвоить ему значение. Это сохраняется в файле XML (.ui), поэтому я предполагаю, что компилятор UIC видит эти данные. Не может ли это быть доступным после преобразования в python? –

+0

Я попробую. Спасибо за помощь в этом! –

0

Мне не повезло с использованием инструмента «Дизайнер» - обычно я делаю несколько грубых макетов, используя pyuic, а затем редактируя и добавляя другие вещи вручную.

Похоже, что вы можете легко выполнить свою задачу, создав собственный пользовательский класс, который наследует от QWidget и имеет дополнительные свойства, которые вы описали. Имея опыт использования пользовательских виджетов в дизайнере, я думаю, что «проще» - просто написать класс самостоятельно, а затем настроить макет вручную.

Я знаю, что это точно не отвечает на ваш вопрос, но, возможно, вы попробуете некоторые из моих предложений.

2

Если вы добавили свойство в конструктор под названием «MyProperty», принеси его ...

mywidget.property("myproperty") 

Это прекрасно работает в PyQt 4.8.3, возможно, он не работает в предыдущих версиях.