Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/56: Рейтинг темы: голосов - 56, средняя оценка - 4.95
GL
0 / 0 / 0
Регистрация: 21.12.2012
Сообщений: 27

Создать text edit в GUI

25.08.2014, 15:00. Показов 10558. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
% 1. есть графическое окно
figure('MenuBar','None','Name','Rout', 'NumberTitle','Off');
% для ввода числа, используемого в расчетах,  задано окно 
uicontrol('Style','edit', 'String',' ', 'Position',[40,340,60,25],'Tag','edt_s');
% при попытке переход от оконного представления к количественному с помощью  
s=str2num(get(handles.edt_s,'String')); 
%%  выдается ошибка =Undefined variable "handles" or function "handles.edt_s"= 
%%  =Error in ChageRout_2_hand (line 11)  s=str2num(get(handles.edt_s,'String'))=
% 2. Если использовать кнопку, при нажатии которой должен начинаться расчет
uicontrol('Style','PushButton', 'String','calc', 'Position',[40,210,35,25], 'Tag','push_calc')
% и применить функцию Callback
function push_calc_Callback(hObject, eventdata, handles)
s=str2num(get(handles.edt_s,'String')); 
%%  выдается сообщение об ошибке
%%  =Function definitions are not permitted in this context=
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.08.2014, 15:00
Ответы с готовыми решениями:

Edit text в GUI
Здравствуйте, скажите, возможно ли сделать так, что бы через поле edit text можно было редактировать значения переменных которые записаны в...

Ввод формулы в edit text Matlab GUI
не могу понять, как в матлабовском gui в edit text сделать так, чтобы я вводил формулу, а он ее рисовал в axes. Т.е., например: ввожу в...

Ввод массива значений в Edit Text в GUI
Здравствуйте, возникла такая проблема: мне нужно записать в Edit Text в GUI массив значений, как это сделать?

4
 Аватар для tvoretsmira
462 / 452 / 56
Регистрация: 28.05.2013
Сообщений: 699
25.08.2014, 15:09
Цитата Сообщение от GL Посмотреть сообщение
%% выдается ошибка =Undefined variable "handles" or function "handles.edt_s"=
%% =Error in ChageRout_2_hand (line 11) s=str2num(get(handles.edt_s,'String'))=
В том месте где вы написали эту строку переменной handles не существует!
Цитата Сообщение от GL Посмотреть сообщение
%% =Function definitions are not permitted in this context=
Если писать скрипт а после него написать функцию, то появится такая ошибка. Скрипт и функция должны быть в отдельных файлах.
1
141 / 111 / 19
Регистрация: 14.04.2014
Сообщений: 224
Записей в блоге: 10
25.08.2014, 15:50
GL, откуда берется handles? эта переменная обычно появляется при использовании GUIDE, если же прописывать все компоненты визуальной среды руками, то эта переменная ниоткуда не возникнет. Как вариант можно сохранить просто хэндлы:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
hFig = figure('MenuBar','None','Name','Rout', 'NumberTitle','Off');
edt_s = uicontrol('Style','edit', 'String',' ', 'Position',[40,340,60,25],'Tag','edt_s');
% тогда по ЭТОМУ хэндлу к нему и обращаться:
s=str2num(get(edt_s, 'String')); 
% далее создаем кнопку:
push_calc = uicontrol('Style','PushButton', 'String','calc', 'Position',[40,210,35,25], 'Tag','push_calc')
% и вручную прикручиваем событие Callback:
set(push_calc, 'Callback', @push_calc_Callback)
% и потом описываем соответствующую функцию:
function push_calc_Callback(hObject, eventdata, handles)
    s = str2num(get(hObject,'String')); 
end
Только иметь надо ввиду о чем говорил tvoretsmira:
Цитата Сообщение от tvoretsmira Посмотреть сообщение
Если писать скрипт а после него написать функцию, то появится такая ошибка. Скрипт и функция должны быть в отдельных файлах.
Т.е. либо в отдельных файлах, либо изначально делать файл-функцию и тогда колбэк будет ее вложенной функцией
1
GL
0 / 0 / 0
Регистрация: 21.12.2012
Сообщений: 27
26.08.2014, 23:10  [ТС]
Исходная проблема состояла в следующем:
1. есть графическое окно
figure('MenuBar','None','Name','Rout', 'NumberTitle','Off');
для ввода числа, используемого в расчетах, задано окно
uicontrol('Style','edit', 'String',' ', 'Position',[40,340,60,25],'Tag','edt_s');
при попытке переход от оконного представления к количественному с помощью
s=str2num(get(handles.edt_s,'String'));
выдается ошибка
Undefined variable "handles" or function "handles.edt_s"
Error in ChageRout_2_hand (line 11)
s=str2num(get(handles.edt_s,'String'))
2. Если использовать кнопку, при нажатии которой должен начинаться расчет
uicontrol('Style','PushButton', 'String','calc', 'Position',[40,210,35,25], 'Tag','push_calc')
и применить функцию Callback
function push_calc_Callback(hObject, eventdata, handles)
s=str2num(get(handles.edt_s,'String'));

выдается сообщение об ошибке
Function definitions are not permitted in this context
Разъясните, пожалуйста, вопросы по скрипту-ответу от letete
1. Фрагмент скрипта-ответа
Matlab M
hFig = figure('MenuBar','None','Name','Rout', 'NumberTitle','Off');
edt_s = uicontrol('Style','edit', 'String',' ', 'Position',[40,340,60,25],'Tag','edt_s');
% тогда по ЭТОМУ хэндлу к нему и обращаться:
s=str2num(get(edt_s, 'String')); 
% далее создаем кнопку:
push_calc = uicontrol('Style','PushButton', 'String','calc', 'Position',[40,210,35,25], 'Tag','push_calc')
% и вручную прикручиваем событие Callback:
set(push_calc, 'Callback', @push_calc_Callback)
дает ошибку:
Undefined function 'push_calc_Callback' for input arguments of type 'double'.
Error while evaluating uicontrol Callback
2. Верно ли будет если перед началом скрипта поставить "function" и после функции приведенной ниже также поставить end (чтобы "изначально делать файл-функцию и тогда колбэк будет вложенной функцией") и потом описываем соответствующую функцию:
Matlab M
1
2
3
function push_calc_Callback(hObject, eventdata, handles)
    s = str2num(get(hObject,'String')); 
end
0
 Аватар для tvoretsmira
462 / 452 / 56
Регистрация: 28.05.2013
Сообщений: 699
27.08.2014, 08:39
Цитата Сообщение от GL Посмотреть сообщение
при попытке переход от оконного представления к количественному
Нет такого понятия оконное представление. Выражение get(handles.edt_s,'String') возвращает значение свойства String графического объекта, имеющего указатель handles.edt_s. И это значение имеет клас char, то есть возвращает строку.
Цитата Сообщение от GL Посмотреть сообщение
дает ошибку:
Undefined function 'push_calc_Callback' for input arguments of type 'double'.
Error while evaluating uicontrol Callback
Чтобы матлаб мог найти функцию файл функции должен находится в текущей директории или на пути поиска матлаба. Скрипт и функция не могут быть в одном файле. Но в одном файле могут находится несколько функций. Недопустимо писать функцию в коммандном окне, для этого используются *.m файлы.
Цитата Сообщение от GL Посмотреть сообщение
Верно ли будет если перед началом скрипта поставить "function" и после функции приведенной ниже также поставить end (чтобы "изначально делать файл-функцию и тогда колбэк будет вложенной функцией")
Верно. Однако то, что будет следовать за определением функции будет уже не скриптом, а функцией. Разница заключается в том, что скрипт использует базовое рабочее пространство матлаба; а функция имеет своё собственное пространство. Особенностью вложеной функции является то, что ей доступны кроме переменных в её рабочем пространстве также и переменные рабочего пространства той функции, в которую она вложена.
Следует также правильно задать функцию согласно шаблону:
function [выходные переменные] = Название_функции(входные переменные)
а не просто ставить "function" как пишете вы.
Цитата Сообщение от GL Посмотреть сообщение
% и потом описываем соответствующую функцию:
function push_calc_Callback(hObject, eventdata, handles)
Нет, не потом, чтобы сделать функцию вложеной, она должна предшествовать закрытию (с помощью end) той функции, в которую её вкладывают:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
function Main(a,c)
% В эту функцию вложена функция Nested
b=uicontrol;
AlsoInFile(c)
  function Nested
  % Функции Nested доступны переменные a, b и с
  % но недоступна переменная d
  end
end
function AlsoInFile(d)
% Эта функция не вложена в функцию Main
% Eй недоступны переменные a и b, однако в рабочем пространстве этой функции есть переменная d
end
Добавлено через 8 часов 14 минут
Кроме того, у вложенной функции и функции в которую её вложили статическое рабочее пространство. Это означает, что в рабочее пространство нельзя добавить новую переменную, которой не было в тексте функции (в режиме отладки, командная форма функции load, присвоение новым переменным значений с помощью функций eval, evalin, or assignin)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.08.2014, 08:39
Помогаю со студенческими работами здесь

Создать процедуру Edit.text
Я начинающий программист и не справился с одной простой задачкой. На компоненте Edit.text нужно создать процедуру для OnClick чтоб когда по...

GUI text
как сделать чтобы в блок text заносилась матрица ? нужно поменять тип данных или как? Вот у меня работает с простым числом ...

Не видно GUI Text
Хочу добавить Текст на игровую область... Поставил GUI Text, ввел текст, Font Arial 20px. Но при смене режима просмотра на Game, ничего не...

Edit text
Я, конечно, понимаю, что вопрос идиотский. Приходится сейчас самому изучать Delphi, и поэтому многое непонятно. А вопрос такой: у меня в...

Edit.Text
Есть текст в компоненте Edit, чтобы было понятно, чего же такого туда вводить. Как сделать, чтобы при помещении в него курсора, этот текст...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru