Можно ли получить доступ к пользовательским свойствам из QT Designer после преобразования в python? - PullRequest
3 голосов
/ 23 февраля 2010

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

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

Спасибо

Эрик

Ответы [ 3 ]

2 голосов
/ 19 апреля 2011

Если вы добавили свойство в Designer с именем «myproperty», извлеките его с помощью ...

mywidget.property("myproperty")

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

0 голосов
/ 24 февраля 2010

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

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

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

0 голосов
/ 23 февраля 2010

Проверьте эту статью Эрик. В частности, посмотрите на раздел «Создание плагина». У River Bank Computing есть еще одна замечательная ссылка PyQt .

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

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

...