首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在图形用户界面布局工具箱创建的选项卡中使用EasyGUI的功能?

如何在图形用户界面布局工具箱创建的选项卡中使用EasyGUI的功能?
EN

Stack Overflow用户
提问于 2013-06-13 04:39:51
回答 1查看 1.7K关注 0票数 3

我使用MATLAB file exchangeGUI Layout ToolboxEasyGUI来开发我的图形用户界面。我已经使用GUI Layout Toolbox创建了6个选项卡,我想使用EasyGUI的功能(如下拉菜单,按钮等)。在6个选项卡中的一个(例如Tab#2)中。我该怎么做呢?

执行以下操作将弹出两个不同的图形,这不是我想要的:

代码语言:javascript
复制
fh = figure('Units', 'normalized', ...
   'OuterPosition', [0.1 0.2 0.4 0.4], ...
   'Toolbar', 'none', 'Menu', 'none');

% ------------------Create Tabs---------------------
p = uiextras.TabPanel('Parent', fh);    % Tab Component

Tab1 = uiextras.HBox('Parent', p);          % 1st Tab
Tab2 = uiextras.HBox('Parent', p);          % 2nd Tab - Horiz Box
Tab3 = uiextras.HBox('Parent', p);          % 3rd Tab - Horiz Box
Tab4 = uiextras.HBox('Parent', p);          % 4th Tab - Horiz Box
Tab5 = uiextras.HBox('Parent', p);          % 5th Tab - Horiz Box
Tab6 = uiextras.HBox('Parent', p);          % 6th Tab - Horiz Box

myGui = Tab2;

freq1 = gui.slider('Frequency 1 (Hz)', [1 40]);
freq2 = gui.slider('Frequency 2 (Hz)', [1 40]);
phaseDiff = gui.numericmenu('Phase difference (degrees)', 0:30:180);
plotType = gui.textmenu('Lissajous plot type', {'2d-phase', '2d-comet'});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-17 23:45:24

根据对EasyGUI代码的仔细阅读,看起来gui.manualguigui.container的目的是使用整个图形窗口作为图形用户界面的父窗口,而不是任何其他uicontainer。(也许我错了,但除了autoguimanualgui之外,我没有看到任何其他文件是gui.container的子类。

然而,看起来我们很幸运!gui.container代码的构造函数中包含以下内容:

代码语言:javascript
复制
elseif ishandle(uihandle) && strmatch(get(uihandle,'type'), ...
        {'figure', 'uipanel', 'uicontainer', 'uiflowcontainer', 'uigridcontainer'})
    obj.UiHandle = uihandle;

这意味着存在这样一种情况,即可以将gui.container对象创建为uipanel对象的子级。我修改了gui.manualgui构造函数,以接受一个句柄图形对象并创建一个新的uipanel对象而不是figure,然后将其传递给它的超类构造函数:

代码语言:javascript
复制
function obj = manualgui(hg)

        if exist('hg', 'var')
            h = uipanel(...
                'Parent', hg);
        else

        h = figure(...
            'Name', 'gui.manualgui', ...
            'BackingStore'      , 'off', ...
            'DockControls'      , 'off', ...
            'NumberTitle'       , 'off', ...
            'MenuBar'           , 'none', ...
            'Resize'            , 'on', ...
            'Visible'           , 'on', ...
            'WindowStyle'       , 'normal');

        end

        obj@gui.container(h);      

    end

然后,我在gui.container构造函数中添加了一些代码,以说明图形的一些属性(即Color)不是uipanels (即BackgroundColor)的属性:

代码语言:javascript
复制
function obj = container(uihandle)

        if ~exist('uihandle', 'var')                
            obj.UiHandle = figure();
        elseif ishandle(uihandle)  &&  strcmp(get(uihandle, 'tag'), 'EasyGUIContainer')
            % return the existing instance
            obj = get(uihandle, 'userdata');
            return;
        elseif ishandle(uihandle) && strmatch(get(uihandle,'type'), ...
                 {'figure', 'uipanel', 'uicontainer', 'uiflowcontainer', 'uigridcontainer'})
            obj.UiHandle = uihandle;
        else
            throw(MException('container:InvalidHandle', 'Invalid HG handle'));
        end

        % Backgroundcolor is the same as used by GUIDE
        if ishandle(uihandle) && strcmp(get(uihandle,'type'), ...
                                        'uipanel')
            set(obj.UiHandle, 'units', 'pixels', ...
                              'tag', 'EasyGUIContainer', ...
                              'backgroundcolor', [0.8314    0.8157    0.7843], ...
                              'userdata', obj, ...
                              'DeleteFcn', @(h,e) delete(obj));
        else

            set(obj.UiHandle, 'units', 'pixels', ...
                              'tag', 'EasyGUIContainer', ...
                              'color', [0.8314    0.8157    0.7843], ...
                              'userdata', obj, ...
                              'DeleteFcn', @(h,e) delete(obj));
        end
    end

在您的示例中,我只是尝试实例化freq1对象;这是因为我现在使用的是gui.manualgui对象而不是gui.autogui对象。您可以将其扩展到autogui上;我现在还没有,因为我要离开我可以使用MATLAB的工作,这不是很简单的事情。下面是我做了上述修改后用来制作这个图形的最终代码:

代码语言:javascript
复制
fh = figure('Units', 'normalized', ...
   'OuterPosition', [0.1 0.2 0.4 0.4], ...
   'Toolbar', 'none', 'Menu', 'none');

% ------------------Create Tabs---------------------

p = uiextras.TabPanel('Parent', fh);    % Tab Component

Tab1 = uiextras.HBox('Parent', p);          % 1st Tab
Tab2 = uiextras.HBox('Parent', p);          % 2nd Tab - Horiz Box
Tab3 = uiextras.HBox('Parent', p);          % 3rd Tab - Horiz Box
Tab4 = uiextras.HBox('Parent', p);          % 4th Tab - Horiz Box
Tab5 = uiextras.HBox('Parent', p);          % 5th Tab - Horiz Box
Tab6 = uiextras.HBox('Parent', p);          % 6th Tab - Horiz Box

myGui = gui.manualgui(Tab2);
freq1 = gui.slider('Frequency 1 (Hz)', [1 40], myGui);
% freq2 = gui.slider('Frequency 2 (Hz)', [1 40]);
% phaseDiff = gui.numericmenu('Phase difference (degrees)', 0:30:180);
% plotType = gui.textmenu('Lissajous plot type', {'2d-phase', '2d-comet'});

结果如下:

显然,由于我使用的是manualgui而不是autogui,您必须自己手动放置滑块,或者修改autogui以使其使用正确的句柄图形对象。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17074924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档