2012-01-31 68 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