立即在列表框中获取选定的值,而无需先单击GUI

时间:2016-12-06 23:15:46

标签: matlab user-interface

我的gui上有一个列表框。当我启动程序时,选择列表框中的第一个值。但是,当您首先单击它时,程序只会注册一个值。 那么有没有一种方法可以启动我的计算而无需单击列表框中的第一个选项?

我的想法是在Opening函数中设置句柄,但它无法解决。

这是我的代码:

function lastfolge_aufbereiten_OpeningFcn(hObject, eventdata, handles, varargin)
...
...
guidata(hObject, handles);




function listbox_runden_stelle_Callback(hObject, eventdata, handles)
contents=cellstr(get(hObject,'String'));
popupmenu_runden_stelle=contents(get(hObject,'Value'));
if (strcmp(popupmenu_runden_stelle,'10'))
    y=1;
elseif (strcmp(popupmenu_runden_stelle,'100'))
    y=2;
end
handles.y=y;
guidata(hObject, handles); 

1 个答案:

答案 0 :(得分:0)

快速修复(但不是那么漂亮)可以在Openingfunction中用弹出菜单的句柄作为输入来调用listbox_runden_stelle_Callback

listbox_runden_stelle_Callback(handles.listbox_runden_stelle, [], handles)

更一般的答案:您可以使用MATLAB创建uicontrol(popupmenu)时执行的CreateFcn。以下是CreateFncCallback调用公共评估函数

的简短示例
function PopupMenu()

figure;
uicontrol(...
    'Style', 'popup', ...
    'String', {'Hello', 'World'}, ...
    'CreateFcn', @PopupMenuCreateFcn, ... 
    'Callback',  @PopupMenuCallback);

function PopupMenuCallback(hObject, ~)
disp('In Callback()')
PopupMenuEvaluate(hObject);

function PopupMenuCreateFcn(hObject, ~)
disp('In CreateFcn()')
PopupMenuEvaluate(hObject);

function PopupMenuEvaluate(popupMenu)
fprintf('Evaluated "%s" \n', popupMenu.String{popupMenu.Value})

(如果您使用较旧的Matlab版本,则可能必须使用虚拟字符串替换"〜"使用get(...)替换。(点)运算符以获取属性)

运行时,直接调用CreateFcn,用户无需从菜单中选择。

>> PopupMenu
In CreateFcn()
Evaluated "Hello" 

如果用户则选择' World'

In Callback()
Evaluated "World" 

如果要对CreateFcnCallback执行相同的操作,您可以将它们绑定到同一个公共函数

uicontrol(...
    'Style', 'popup', ...
    'String', {'Hello', 'World'}, ...
    'CreateFcn', @PopupMenuEvaluate, ... 
    'Callback',  @PopupMenuEvaluate);