2012-01-31 70 views
1

我想這是一個很簡單的問題,但我花更多的時間來尋找答案,比我想如果我問這裏按鈕來改變可變

我做了3個按鈕,當我點擊的他們,一個變量被改變,所以像:

[Button1] when pressed: bp = sys 
[Button2] when pressed: bp = mean 
[Button3] when pressed: bp = dia 

這是我到目前爲止,我從恢復腳本按鈕複製的代碼。我需要調整以適應我的需求?

kiessys = uicontrol('Position', [10 35 60 30],'String','Sys(R)','Callback','uiresume(gcbf)'); 
kiesmean = uicontrol('Position', [10 70 60 30],'String','Mean(B)','Callback','uiresume(gcbf)'); 
kiesdia = uicontrol('Position', [10 105 60 30],'String','Dia(G)','Callback','uiresume(gcbf)'); 

在此先感謝

回答

4

你去:

global bp; 

figure 
kiessys = uicontrol('Position', [10 35 60 30],'String','Sys(R)','Callback', {@fun, 'sys'}); 
kiesmean = uicontrol('Position', [10 70 60 30],'String','Mean(B)','Callback', {@fun, 'mean'}); 
kiesdia = uicontrol('Position', [10 105 60 30],'String','Dia(G)','Callback', {@fun, 'dia'}); 
kiesdia = uicontrol('Position', [10 140 200 30],'String','Output current value','Callback', 'disp(bp)'); 

和存儲回調函數funfun.m

function fun(~, ~, value) 
    global bp; 
    bp = value; 
end 
+0

非常好,正是我需要的! – Whyaken 2012-01-31 12:48:54

0

Alexandrew的回答是不錯的,但是你可以不使用「有趣」功能就可以做到這一點。只需在「回調」字符串命令型,即

kiessys = uicontrol('Position', [10 35 60 30],'String','Sys(R)','Callback', 'bp = sys;'); 
kiesmean = uicontrol('Position', [10 70 60 30],'String','Mean(B)','Callback','bp = mean;'); 
kiesdia = uicontrol('Position', [10 105 60 30],'String','Dia(G)','Callback', 'bp = dia;'); 

的命令將在「基地」工作區運行,變量將是可見的任何腳本。這樣,您不必將其聲明爲global,這通常不是一種好的做法。

有關在Matlab中創建GUI的注意事項。這是一個很好的做法(實際上最好)使用GUIDE來創建GUI,而不是使用命令,因爲它大大簡化了事情,開發速度也快得多(只需考慮使用命令創建10個按鈕,2個軸等)。 。單獨定位它們是一場噩夢)。

+0

好的提示。是的,我已經想發佈一些關於'global'的東西,這也可以通過使用句柄類的屬性來解決,這肯定會在這種情況下成爲開銷,但是如果函數將會是擴展,這可能會有所幫助 – tim 2012-02-01 07:45:14