показать адрес файла в графическом интерфейсе, почему Uicontrol возвращает неопределенное - PullRequest
0 голосов
/ 23 мая 2018

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

xdel(winsid());
clear;
clc;

//FileInformation=uigetfile(["*.txt"]);
//golbal window parameters
global margin_x margin_y;
global frame_w frame_h plot_w plot_h;
//window parameter initialization
frame_w=300;
frame_h=500;//frame width and height
plot_w=600;
plot_h=frame_h;//plot width and height
margin_x=15;
margin_y=15;//horizontal and vertical margin for elements
defaultfont="arial";
axes_w=3*margin_x+frame_w+plot_w; //axis width
axes_h=2*margin_y+frame_h;
demo=scf(100001);//create window with id=100001 and make it the current one
demo.background=-2;
demo.figure_position=[100 100];
demo.figure_name=gettext("profile prcessing");
demo.axes_size=[axes_w axes_h];
///////////////////////////////////////
//create menu
//remove menus and toolbars
delmenu(demo.figure_id, gettext("&File"));
delmenu(demo.figure_id, gettext("&Tools"));
delmenu(demo.figure_id, gettext("&Edit"));
delmenu(demo.figure_id, gettext("&?"));
toolbar(demo.figure_id,"off");
//new menu/////////////////////////////////////////////////////////////////
*h1=uimenu("parent",demo,"label",gettext...                           /////
("openfile"),"callback","information=uigetfile()");*                  /////
////////////////////////////////////////////////////////////////////////////
h2=uimenu("parent",demo,"label",gettext("About"),"callback","About();");

///
function About()
    msg=msprintf(gettext("this program is developed for wear depth...
    measurement. any unclear please contact ben XU"));
    messagebox(msg,gettext("About"),"info","modal");
endfunction
///
//creating a frame
my_frame=uicontrol("parent",demo,"relief","groove","style","frame",...
"units","pixels","position",[margin_x margin_y frame_w frame_h],...
"horizontalalignment","center","background",[1 1 1],"tag","frame control");
//title of frame
my_frame_title=uicontrol("parent",demo,"style","text","string",...
"address of file","units","pixels","position",[30+margin_x ...
 margin_y+frame_h-10 frame_w-60 20],...
 "fontname",defaultfont,"fontsize",16,"horizontalalignment",...
 "center","backgroun",[1 1 1],"tag","title_frame_control");
//
uicontrol("parent",demo,"style","text","string","address",...
"position",[20,240, 180, ...
20],"horizontalalignment","left","fontsize",14,"background",[1 1 1]);
////////////////////////////////////////////////////////////////////////////
*uicontrol("parent",demo,"style","edit","string",information,"position",...
[20,240,180,20],"horizontalalignment","left","fontsize",14,"background",...
[0.9 0.9 0.9],"tag","edi");*
////////////////////////////////////////////////////////////////////////////

, как я пометил квадратом "/".проблемы есть информация, почему не определена?Зачем ?как мне это сделать?

спасибо всем заранее.

Ответы [ 2 ]

0 голосов
/ 20 июня 2019

Если вы создадите свое меню, пункт меню и отредактируете виджет следующим образом

h1 = uimenu("parent",demo,"label",gettext("file"))
uimenu("parent",h1,"label",gettext("openfile"),"callback","h3.string=uigetfile()");
// ...
h3 = uicontrol("parent",demo,"style","edit","string","","position",...
[20,240,180,20],"horizontalalignment","left","fontsize",14,"background",...
[0.9 0.9 0.9],"tag","edi");

Тогда все будет в порядке.

0 голосов
/ 20 июня 2019

Обратные вызовы выполняются в их собственной среде.

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

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

Или вы можете использовать свойство userdata элемента пользовательского интерфейса, который вы используете для запуска вызова.Внутри обратного вызова вы можете обратиться к нему через gcbo, который является дескриптором вызывающего элемента."Набор (gcbo," пользовательские данные "uigetfile ());"должен сделать свое дело.Поскольку h1 - это ваш дескриптор для элемента пользовательского интерфейса, где обратный вызов может быть вызван в вызывающей среде, информация о выбранном пользователем файле будет найдена в h1.userdata.Вы бы использовали "information = h1.userdata;"или "information = get (h1," userdata ");".

...