Является ли MATLAB GUIDE Creator GUIDE настолько ужасным, как я думаю? Есть ли альтернатива?

Я пытался собрать графический интерфейс в MATLAB и столкнулся с большими трудностями. Вот небольшая предыстория моей программы: я хочу создать мастер, который будет пошагово выполнять пользователям процесс анализа изображений. Мастер будет сигнализировать пользователям об их вводе, а затем выполнять действие обработки изображения после нажатия кнопки с надписью «Далее» и так далее. Прочитав справку по MATLAB, я понял, что есть два подхода к созданию графического интерфейса: 1. написать графический интерфейс с помощью строк кода. 2. используйте РУКОВОДСТВО.

Я полагал, что у GUIDE будет самая пологая кривая обучения. Сначала процесс был прямолинеен. Я мог перетаскивать кнопки и текстовые поля и легко упорядочивать их. Мой план состоял в том, чтобы расположить ряд панелей с кнопками, текстом и т. д., которые последовательно становились бы видимыми при нажатии кнопки «Далее». И тут я впал в ступор.

Как только я сохраняю панель с помощью GUIDE, MATLAB создает файл .m и файл .fig. Читая файл .m, я вижу, что у меня осталось место для написания кода для обратных вызовов, но не более того. Файл .fig является двоичным, и поэтому я не осмеливаюсь его редактировать. Мне осталось задаться вопросом, как я могу управлять объектами, например. Как настроить видимость панели? Кроме того, мне пришлось создавать каждую панель мастера отдельно. Я надеялся, что смогу вручную объединить файлы .m в файл-оболочку wizard.m, но я не думаю, что это правильный подход (по крайней мере, для меня, потому что я не понимаю, как это сделать).

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

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

Я видел несколько причудливых графических интерфейсов, созданных в MATLAB, и, попробовав это сам, и потерпев неудачу, я сбит с толку их существованием. Либо тот, кто их сделал, был исключительным пользователем MATLAB (я не являюсь), либо я упускаю что-то очевидное, и мне не помешала бы помощь. Теперь я задаюсь вопросом, стоит ли графический интерфейс затраченных усилий. Я не вижу себя в изучении чего-то вроде QT из-за дополнительной проблемы встраивания кода MATLAB в другие языки, такие как python.

У кого-нибудь есть совет на эту тему? Может ли кто-нибудь указать, где я ошибаюсь или почему у меня такие трудности?


person wherestheforce    schedule 08.10.2011    source источник
comment
Я использую GUIDE для визуального отображения своих графических интерфейсов, а затем программирую их через uicontrol(). Я обращаюсь к свойствам GUIDE, чтобы выяснить, как расположить материал. До сих пор это работало хорошо для меня, хотя это довольно утомительно.   -  person Dang Khoa    schedule 09.10.2011


Ответы (6)


Файл .fig является двоичным, и поэтому я не осмеливаюсь его редактировать.

Файл FIG — это файл MAT, содержащий список элементов графического интерфейса со свойствами, которые вы установили в GUIDE.

Как настроить видимость панели?

Назначьте тег элементу, вы можете получить к нему доступ, используя handles.mytag, например set(handles.mypanel, 'visible', 'off')

Кроме того, мне пришлось создавать каждую панель мастера отдельно. Я надеялся, что смогу вручную объединить файлы .m в файл-оболочку wizard.m, но я не думаю, что это правильный подход (по крайней мере, для меня, потому что я не понимаю, как это сделать).

Вы не можете объединить эти автоматически сгенерированные m-файлы в один, зачем вам вообще это нужно? Сохраняйте файлы .fig и .m для каждой страницы мастера!

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

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

У кого-нибудь есть совет на эту тему? Может ли кто-нибудь указать, где я ошибаюсь или почему у меня такие трудности?

Профессиональное программирование графического интерфейса — это непросто, IMO — это даже самая сложная часть.

Помимо графического интерфейса MATLAB, я много использовал как Java Swing, так и .NET WPF, IMO MATLAB GUI намного проще, вы можете сделать 90% с 10% усилиями (обучение). Конечно, вам все еще нужно время, чтобы привыкнуть к нему.

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

Да, GUIDE — не лучшее решение, но, вероятно, лучшая техника для быстрого создания графического интерфейса.

Я видел несколько причудливых графических интерфейсов, созданных в MATLAB, и, попробовав это сам, и потерпев неудачу, я сбит с толку их существованием.

Эти графические интерфейсы представляют собой хаки, использующие определенные детали графического интерфейса MATLAB, такие как визуальный разделитель, представляющий собой длинный черный текст «__________» на белом элементе управления пользовательского интерфейса, высота которого составляет всего два пикселя, или разные цвета во всплывающей подсказке с использованием html.

И в конце концов вы можете использовать Java Swing в графическом интерфейсе MATLAB (потому что он фактически получен из Swing).

Теперь я задаюсь вопросом, стоит ли графический интерфейс затраченных усилий.

Да, в вашем случае все очень просто, только функциональность, не думайте о вычурности!

person Mikhail    schedule 09.10.2011
comment
+1 за подробный и полезный ответ! - person Jonas; 10.10.2011

GUIDE по состоянию на июнь 2015 года хуже, чем вы думаете. Крайне неэффективен для настройки графического интерфейса, он чертовски глючит. Явно не профессиональный уровень. ГИД, как мне тебя презирать? Перечислю способы:

1) Ошибки ввода при создании графического интерфейса не помечаются. С этой необъявленной ошибкой вы можете работать часами. Когда вы нажмете «СОХРАНИТЬ», GUIDE не сохранит вашу работу. Таким образом, GUIDE нарушает основную директиву любого программного пакета: вы не должны терять работу или данные пользователя. Я не могу поверить, что Mathworks действительно выпустила что-то настолько плохое.

2) Бандитское копирование сомнительно. Допустим, у вас есть программа, которая вычисляет влияние завтрака. У вас есть часы, минуты, количество углеводов в виде редактируемых полей. У вас есть метки в виде статического текста. Вы хотите одно и то же на обед и ужин. Выбрать все. Ctrl-С. Наведите курсор в другое место и нажмите Ctrl-V. Ничего не произошло. Нет, подождите, примерно через 30 секунд появится паста. Но если вы уже занимаетесь чем-то другим, что ж... Попытайтесь выяснить, что, черт возьми, произошло.

3) Даже движение банды сомнительно/странно/сверхъестественно/одержимо. Скажем, вы хотите переместить этот ряд с обедом вверх и вниз? Выделять. Используйте клавиши со стрелками, чтобы переместить его. Успех! Но ждать! Примерно через пять секунд текст и поля редактирования начинают возвращаться в исходное положение! Без вмешательства! Он одержим!

Я использовал GUIDE для создания довольно сложного графического интерфейса. Гораздо больше душевной боли и хлопот, чем должно или могло бы быть. Учитывая бесплатные альтернативы, которые работают с JAVA/Python/Julia, я бы не стал запускать еще один проект MATLAB, которому нужен графический интерфейс. Спасите тесто!

person WizardOfBoz    schedule 06.06.2015
comment
Я собирался задать тот же вопрос, что и ОП, чтобы попытаться оправдать боль, в которую меня втянули при написании материалов GUIDE. Я использую R2015a и думал, что все болезненные дни разработки GUIDE уже улажены. Это определенно прошло долгий путь, но пользовательский опыт отстой. Глючит, как вы говорите, пытаясь скопировать несколько элементов, мне часто приходится обращаться к обозревателю объектов, чтобы убедиться, что ничего не прокрадывается позади меня. Неотвечающие сохранения и выравнивание объектов, это горькая боль ›‹ - person jxramos; 11.06.2015
comment
Я вижу то же поведение, что и в пункте 2) при выполнении команд множественного выбора Align Object, это сводит меня с ума и тратит кучу времени. Если бы это не был официальный инструмент для создания графического интерфейса для Matlab, я бы давно отказался от него. На самом деле я пытаюсь взять благонамеренный, но негибкий программно сгенерированный графический интерфейс человека и отделить представление от бизнес-логики, чтобы я мог повторно использовать бизнес-логику, но я могу просто сдаться и исправить его проблемы с макетом в сценарии, чем пройти через ад НАПРАВЛЯЙТЕ, если это затянется на другой день. - person jxramos; 11.06.2015
comment
Вот еще фанковое поведение! Поэтому, когда вы выполняете длительные операции, на самом деле вызывается курсор ожидания, НО он виден только в меню и на панелях инструментов, а НЕ в рабочей области дизайна GUIDE. Теперь у меня есть привычка делать выборку, если я застреваю в ожидании, когда что-то перестает отвечать, перемещая курсор на область связи и ожидая, пока это не будет сделано. Надеюсь, это сгладит все мои разочарования. - person jxramos; 11.06.2015

Лично я считаю, что GUIDE достаточно хорош для быстрых простых графических интерфейсов и для изучения того, как создавать графические интерфейсы, но теперь я обычно предпочитаю создавать графические интерфейсы программно. Это позволяет лучше контролировать контент. Для меня суть заключается в том, чтобы использовать свойства UserData элементов пользовательского интерфейса для хранения любых полезных данных, включая дескрипторы объектов пользовательского интерфейса, которые вы хотите обновить.

Но если вы хотите что-то умное, вам придется прибегнуть к чему-то на основе Java или .NET.

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

EDIT: макет GUI Панель инструментов, на которую ссылается @Mikhail, выглядит чрезвычайно полезной.

person Nzbuu    schedule 09.10.2011
comment
Прошло пару лет, и теперь я умею пользоваться MATLAB GUIDE. Оглядываясь назад, мне больше всего нравится этот ответ. Графические интерфейсы не являются сильной стороной MATLAB, но они удобны для быстрых простых графических интерфейсов. - person wherestheforce; 22.10.2013

Я программировал графический интерфейс в MATLAB.

Из того, что я видел, GUIDE делает программирование графического интерфейса довольно удобным. Как вы сказали, вам на самом деле не нужно беспокоиться о программировании каких-либо кнопок и т. Д., Это просто расположение кнопок и заполнение m-файлов. Внутри кнопок вы можете настроить видимость, установив для свойства «Видимость» значение «включено» или «выключено».

Я пробовал оба подхода: вручную писать графический интерфейс и писать его с помощью GUIDE. У меня сложилось впечатление, что вам просто нужно вникнуть в это. Как только вы получили представление об дескрипторах (это главное в графическом интерфейсе Matlab), оно у вас есть.

Попробуйте сначала запрограммировать простой графический интерфейс, не начинайте со своего проекта. Узнайте, как работают маркеры и инспектор в MATLAB, и как вы можете установить свойства значений. Выясните, где вы можете хранить данные в графическом интерфейсе и как извлекать их в других окнах (передавать дескрипторы между окнами).

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

person sta    schedule 09.10.2011

Основная проблема с графическими интерфейсами, сгенерированными GUIDE, в отличие от программно созданных, заключается в том, что файл не является текстом. Таким образом, вы не можете использовать контроль версий. Есть обходной путь — вы можете использовать функцию export для создания только .m файла. Конечно, вы не сможете переключить его обратно на fig и отредактировать визуально.
Лично я всегда предпочитаю писать GUI без GUIDE.

person Andrey Rubshtein    schedule 29.01.2012
comment
Вы можете использовать его в системе контроля версий, вы просто не сможете корректно объединить изменения. - person zmbq; 02.06.2013
comment
@zmbq, всякий раз, когда вы нажимаете кнопку в руководстве, чтобы увидеть ее обратный вызов, она фактически меняет фигуру. Это отстой, потому что вы не вносили никаких изменений, но вы можете зафиксировать это как новую версию. - person Andrey Rubshtein; 02.06.2013

Я опоздал к этому разговору, но хотел добавить свои 0,02 доллара. Как вы упомянули, дизайн графического интерфейса не является сильной стороной MatLab. Однако с ним можно многое сделать. Если у вас есть конкретные вопросы, буду рад на них ответить. Кроме того, имейте в виду, что он построен на библиотеке Java Swing, поэтому вы действительно можете использовать эти функции. Однако эти функции не задокументированы. Существует книга под названием Undocumented Secrets of MatLab, в которой дается довольно приличное обсуждение основных компонентов свинга.

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

person physics90    schedule 21.05.2014
comment
Приложив достаточно усилий и жевательной резинки, можно построить башню до Луны. Хотя жевательная резинка может значительно изменить некоторые орбитальные свойства, которые мы привыкли ожидать от Земли, это, по крайней мере, возможно. Это не делает его хорошим способом добраться до Луны. - person KDN; 05.01.2016
comment
У меня есть один: Как поставить якорь? - person Pedro77; 30.03.2017
comment
Ну, разве что жевательную резинку создали, чтобы жевать, а не отправлять людей на Луну. GUIDE БЫЛ создан для создания GUI. - person physics90; 30.03.2017