2016-09-23 9 views
2

Я хочу сыграть свой 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); 

Thankyou ..

+0

Я не могу понять, почему это было бы непонятно. Еще стоит подумать, как сделать кнопку видимой снова. Это нужно планировать. – patrik

+0

Я думаю, что кнопка здесь неправильный подход, потому что, если вы сделаете ее невидимой, путь Matlab больше не может быть нажат. Вы можете манипулировать лежащей в основе Java, но я бы не рекомендовал беспокоиться. Скорее вы должны определить, на каком месте щелкнули фоновое изображение, и координировать обратный вызов таким образом. – thewaywewalk

ответ

1

Чтобы сделать кнопочный невидимым при нажатии на нее, установите visible в от в функции обратного вызова

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

Для сделать его невидимым из других частей/функций в вашем графическом интерфейсе, просто замените hObject на ручка вашей кнопки.


Обновление:

Вы могли бы сделать интерактивное изображение и воспроизводить различные звуки для различных позиций щелчка. Используйте обратный вызов 'ButtonDownFcn' для запуска события клика на изображении. Вы можете получить позицию щелчка, используя свойство axes 'CurrentPoint'. Это возвращает матрицу 2x3 с проецируемыми координатами x-y-z. Но поскольку вы используете 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); 

А функция обратного вызова (отображает х и у коорд.)

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)); 
+0

Я думаю, что это не отвечает на вопрос, поскольку вы больше не можете нажимать кнопку. – thewaywewalk

+0

Вопрос в том, как сделать его невидимым, что делает код выше. Кнопка может быть видима любым другим обратным вызовом в графическом интерфейсе. – NLindros

+0

Это не работает. @ nilZ0r – Alexandria

0

Следующий пример скрывает и показывает кнопки.

Я создал образец, не используя guide.
Вы можете скопировать и вставить этот код в файл Matlab m.
Создание графического интерфейса без guide инструмент, лучший вариант Stack Overflow site, потому что нет необходимости прикреплять файл fig.
Вам лучше использовать инструмент guide, потому что создание графического интерфейса без него сложно.

Следующий пример кода скрыть (и показать) кнопочный:

%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

+0

Я отредактировал ответ. Можете ли вы восстановить кнопку при завершении игры? – Rotem

0

Вы можете посмотреть на this blog entry где я обсуждал, как манипулировать CDATA свойство uicontrols.

Я добавил некоторый код ниже, чтобы показать простой пример:

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

 Смежные вопросы

  • Нет связанных вопросов^_^