Реализация макрос записи для Python GUI? - PullRequest
2 голосов
/ 23 февраля 2011

Мне интересно, как реализовать макрос-рекордер для графического интерфейса Python (вероятно, PyQt, но в идеале не зависит). Нечто похожее на Excel, но вместо получения макросов VB, он будет создавать код на Python. Ранее я сделал что-то для Tkinter, где все обратные вызовы проходят через один класс, который регистрирует действия. К сожалению, мой класс, ведущий регистрацию, был немного уродливым, и я ищу более хороший. Хотя это действительно отличало графический интерфейс от остального кода, оно кажется необычным с точки зрения обычного подключения сигналов / слотов. Есть ли лучший способ?

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

Ответы [ 3 ]

1 голос
/ 23 февраля 2011

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

1 голос
/ 23 февраля 2011

Мышление на высоком уровне, вот что я бы сделал:

Разработайте функцию декоратора, с помощью которой я бы украсил каждую функцию обработки событий.

Эта функция декоратора будет принимать к сведению вызываемую функцию и ее параметры (и, возможно, возвращающие значения) в единой структуре данных - заботясь, чтобы в этой структуре данных помечать экземпляры Widget и Control как особый тип объекта , Это связано с тем, что при других запусках эти виджеты не будут одинаковыми экземплярами - ах, вы даже не можете сериализовать экземпляры виджета инструментария, будь то Qt или иным образом.

Когда приходит время воспроизвести макрос, вы заполняете пробелы, заменяя объект, представляющий виджет, экземплярами фактически запущенных объектов, и просто вызываете исходные функции с оставшимися параметрами.

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

Надеюсь, это поможет. Я мог бы придумать какое-то доказательство концептуального кода для этого (хотя я нахожусь в настроении использовать tkinter сегодня - пришлось бы много читать, чтобы придумать пример Qt4).

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

Пример того, что вы ищете, находится в mayavi2 . Для ваших целей, функциональность mayavi2 «запись скрипта» будет генерировать скрипт Python, который затем может быть тривиально изменен для других случаев. Я слышал, что это работает довольно хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...