【问题标题】:Dynamically add fields to MATLAB GUI?将字段动态添加到 MATLAB GUI?
【发布时间】:2009-07-07 16:39:40
【问题描述】:

我正在使用 GUIDE 生成 MATLAB GUI,但我想在用户单击按钮时创建字段。有没有办法在回调中动态添加新的 GUI 对象?

【问题讨论】:

    标签: user-interface matlab


    【解决方案1】:

    实现此目的的一种方法是在开始时创建 GUI 对象,但将它们的“可见性”属性设置为“关闭”。然后,当用户单击按钮时,您将“Visibility”属性设置回“on”。这样,您就不会在 GUI 运行时创建新的 GUI 对象,您只需更改它的哪些部分可见或不可见。

    编辑:如果您不知道在运行时之前需要多少新的 GUI 对象,这就是您将新的 GUI 对象添加到句柄结构(其中 hFigure 是 GUI 图的句柄):

    p = uicontrol(hFigure,'Style','pushbutton','String','test',...
                  'Callback',@p_Callback);  % Including callback, if needed
    handles.test = p;  % Add p to the "test" field of the handles structure
    guidata(hFigure,handles);  % Add the new handles structure to the figure
    

    您当然必须为新的 GUI 对象(如果需要)编写回调函数,它可能看起来像这样:

    function p_Callback(hObject,eventdata)
      handles = guidata(gcbf);  % This gets the handles structure from the figure
      ...
      (make whatever computations/changes to GUI are needed)
      ...
      guidata(gcbf,handles);  % This is needed if the handles structure is modified
    

    我在上述代码中使用的感兴趣的函数是:GUIDATA(用于存储/检索 GUI 数据)和GCBF(获取当前正在执行回调的对象的父图形的句柄)。

    【讨论】:

    • 问题是直到运行时我才知道要创建多少。我可以通过更改创建的 gui 句柄来做到这一点吗?我正在尝试这样做: p = uicontrols(figure, 'Style','pushbutton','String','test') set(handles.test = p) 但它给了我错误。还有其他方法吗?
    • 上面列出的set命令有问题。你想用它来完成什么?
    • 好吧,我正在尝试 gnovice 的编辑,由于某种原因,当我在指南生成的回调中运行它时,它最终会更改现有元素。我的代码: new_t = uicontrol(hObject,'Style','edit') 然后我尝试: K>> get(new_t, 'Style') ans = pushbutton 这很奇怪,因为 set(handles.test, 'Style','edit ') 最终改变了handles.pushbutton.Style。有什么想法吗?
    • hObject 是图形的句柄,还是另一个 GUI 对象?我有一种感觉 hObject 是一个按钮的句柄。尝试改用 GCBF 函数:new_t = uicontrol(gcbf,'Style','edit');
    【解决方案2】:

    使用 UICONTROL,您将能够添加“字段”(称为 uicontrol 或小部件)。

    您需要指定样式以获取编辑框、按钮等...

    您实际上可能希望 GUIDE 中已经存在所有小部件,然后根据需要更改 visibilityenabled 属性。

    您可以在此处找到我在 MATLAB 中构建 GUI 的视频教程: http://blogs.mathworks.com/videos/category/gui-or-guide/

    这应该涵盖这个和 GUI 构建中的许多相关主题。

    【讨论】:

    • 我可以将创建的uicontrol对象添加到生成的句柄中吗?像 set(handles.test, uicontrol_element)
    • 当你制作 UICONTROL 时,捕获句柄:handles.newWidget = uicontrol(.......)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-07
    • 2011-11-08
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多