如何在GUI中使按钮不可见?

时间:2016-09-23 06:25:46

标签: algorithm matlab user-interface audio wav

我想用我的按钮在打击乐背景图像区域播放我的wav,所以我需要在我的图形窗口看不到我的按钮。

我的剧本:

% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
[s,fs]=wavread('filename.wav');
sound(s,fs);

三江源..

3 个答案:

答案 0 :(得分:1)

要在单击按钮时使其按钮不可见,请在回调函数中将visible设置为 off

set(hObject, 'Visible', 'off')

要使GUI中的其他部分/功能不可见,只需将hObject替换为按钮的句柄即可。

更新

您可以制作可点击的图像,并针对不同的点击位置播放不同的声音。使用回调'ButtonDownFcn'触发图像中的单击事件。您可以使用轴属性'CurrentPoint'来检索单击的位置。这返回为具有x-y-z投影坐标的2x3矩阵。但是当你使用2D绘图时,你可以简单地选择前2个值,阅读更多here

然后使用x / y坐标找出用户点击图像中的内容并为其播放声音。

一个简单的例子:

% Draw an image
figure()
imHandle = image(imread(figPath));
% Set callback function (target function could have any name)
set(imHandle,'ButtonDownFcn', @ImgClickCB); 

回调函数(显示x和y坐标。)

function ImgClickCB(hObject, ~)
clickPoint = get( get(hObject,'Parent'), 'CurrentPoint');
fprintf('Clicked at x: %0.f y: %0.f \n', clickPoint(1,1), clickPoint(1,2));

答案 1 :(得分:0)

以下示例隐藏,并显示按钮。

我创建了一个示例,但没有使用guide 您可以将代码复制并粘贴到Matlab m文件中以供执行 使用guide工具创建GUI,更适合Stack Overflow站点,因为无需附加fig文件。
您最好使用guide工具,因为创建没有它的GUI很复杂。

以下代码示例隐藏(和显示)按钮:

%TestNoGuideHideButton.m
%Create GUI with two buttons, without using GUIDE.
function TestNoGuideHideButton()
    %Create figure.    
    h.fig = figure('position', [800 400 260 80]);

    %Add button, with callback function Button1
    h.buttonOne = uicontrol('style', 'pushbutton',...
        'position',[10 20 100 40], ...
        'string' , 'Button1', ...
        'callback', {@Button1});

    %Add button, with callback function hideButton
    h.buttonTwo = uicontrol('style', 'pushbutton', ...
        'position',[150 20 100 40], ...
        'string' , 'Hide Button1', ...
        'callback', {@hideButton});


    function Button1(hObject, eventdata)
        %Modify color of Button1 to random color.
        set(h.buttonOne, 'BackgroundColor', rand(1, 3));
    end


    function hideButton(hObject, eventdata)
        is_visible = isequal(get(h.buttonOne, 'Visible'), 'on');

        if (is_visible)
            %Hide buttonOne if Visible.
            set(h.buttonOne, 'Visible', 'off');
            set(h.buttonTwo, 'string', 'Show Button1'); %Replace string.
        else
            %Restore buttonOne if hidden.
            set(h.buttonOne, 'Visible', 'on');
            set(h.buttonTwo, 'string', 'Hide Button1'); %Replace string.
        end
    end
end

对于您上面描述的问题,您显然无法添加按钮来显示和隐藏其他按钮。

您可以在播放结束时恢复按钮。

您还可以为背景图添加回调函数(在WindowButtonDownFcn中查找guide)。
按下图中的任意位置,触发回调,是否可以恢复隐藏按钮。

enter image description here

答案 2 :(得分:0)

您可能需要查看this blog entry,其中我讨论了如何操作uicontrols的 CData 属性。

我在下面添加了一些代码来展示一个简单的例子:

f = figure(); % create a figure with an axes on it
pb = uicontrol('Style','checkbox', 'Units','pixels', 'Position',[10 10 300 200], ...
               'Callback',@(a,b)msgbox('play clown!'));
% read some data
data = load ( 'clown' );
% extract out the image
img = data.X;
% convert image to RGB for displaying on checkbox
img = ind2rgb(img,colormap(f)); 
% Set the cdata property of the checkbox to be the image of interest
set(pb, 'CData', img )

上面的代码创建了一个带有小丑图像的图形,您可以单击它(这可能是您的鼓)。 “按钮”一直停留在那里,你不需要让它看不见

注意:我使用复选框而不是按钮 - >因为有时一个按钮在聚焦时可以有一个“边框”,这可能会影响图像,而复选框却没有。

我复制了下面生成的图像(点击按钮后):

enter image description here