我想用我的按钮在打击乐背景图像区域播放我的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);
三江源..
答案 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
)。
按下图中的任意位置,触发回调,是否可以恢复隐藏按钮。
答案 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 )
上面的代码创建了一个带有小丑图像的图形,您可以单击它(这可能是您的鼓)。 “按钮”一直停留在那里,你不需要让它看不见
注意:我使用复选框而不是按钮 - >因为有时一个按钮在聚焦时可以有一个“边框”,这可能会影响图像,而复选框却没有。
我复制了下面生成的图像(点击按钮后):