Matlab UIControl Units

Я использую uicontrol для создания элементов GUI. Ниже мой код

uicontrol('Style','pushbutton', 'String','Load data','Parent',hTabs(1),'Position',[250 825 80 20], 'Callback',@ButtonCallback);

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

2 ответа

Решение

Когда вы используете Normalized в единицах измерения вам необходимо определить положение между 0 и 1, где 0 - это нижняя / левая сторона, а 1 - общая высота / ширина содержащего объекта.

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

  • Переключите единицы на normalized в отдельном вызове функции (показано ниже)
  • Создать uicontrol с нормализованными единицами, но вам придется рассчитать правильный вектор положения

Вот примеры того, как это сделать

Простое решение заключается в создании uicontrol а затем установить единицы для нормализации в отдельном вызове

u = uicontrol(...) %don't specify the units
set(u,'Units', 'Normalized'); % this solves your problem

Если вы хотите получить вектор положения в нормализованных единицах

normPos = get(u, 'Position') % get the position in normal space

Затем используйте эти цифры для создания uicontrol с нормализованными единицами:

u = uicontrol(...,'Units','Normalized', 'Position', normPos); 

При использовании 'units','normalized' вариант вы должны изменить свой вектор положения. Система отсчета фигур имеет координаты от 0 до 1.

Например

uicontrol('Style','pushbutton',...
          'String','Load data',...
          'Parent',hTabs(1),...
          'units','normalized',...
          'Position',[0 0 0.1 0.1],...
          'Callback',@ButtonCallback); 

дает вам кнопку 10% высоты и ширины в левом нижнем углу родительской панели.

Другие вопросы по тегам