⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ui_events.asv

📁 matlab从入门到精通第9章书后源码对初学者很有帮助
💻 ASV
字号:
function ui_events
% 创建uipanel事件处理实例
% 生成两个向量:在matlab的基础工作空间内生成向量
evalin('base','data_x = 0:pi/24:2*pi;')
evalin('base','data_y = cos(0:pi/24:2*pi);')

% 获取系统背景颜色
panelColor = get(0,'DefaultUicontrolBackgroundColor');

% 回调函数编写
% 图形调整回调函数
function figResize(src,evt)
    fpos = get(f,'Position');
    set(botPanel,'Position',...
        [1/20 1/20 fpos(3)-.1 fpos(4)*8/35])
    set(rightPanel,'Position',...
        [fpos(3)*85/120 fpos(4)*8/35 fpos(3)*35/120 fpos(4)*27/35])
    set(centerPanel,'Position',...
        [1/20 fpos(4)*8/35 fpos(3)*85/120 fpos(4)*27/35]);
end
    
% 底面板大小调整函数
function botPanelResize(src, evt)
    bpos = get(botPanel,'Position');
    set(plotButton,'Position',...
        [bpos(3)*10/120 bpos(4)*2/8 bpos(3)*24/120 2])
    set(holdToggle,'Position',...
        [bpos(3)*45/120 bpos(4)*2/8 bpos(3)*24/120 2])
    set(popUp,'Position',...
        [bpos(3)*80/120 bpos(4)*2/8 bpos(3)*24/120 2])
    set(popUpLabel,'Position',...
        [bpos(3)*80/120 bpos(4)*4/8 bpos(3)*24/120 2])
end

% 右侧面板大小调整函数
function rightPanelResize(src,evt)
    rpos = get(rightPanel,'Position');
    set(listBox,'Position',...
        [rpos(3)*4/32 rpos(4)*2/27 rpos(3)*24/32 rpos(4)*20/27]);
    set(listBoxLabel,'Position',...
        [rpos(3)*4/32 rpos(4)*24/27 rpos(3)*24/32 rpos(4)*2/27]);
end

% 列表框回调函数处理
  function listBoxCallback(src,evt)
        % 从工作空间中得到向量
        vars = evalin('base','who');
        set(src,'String',vars)
    end % listBoxCallback

% plot按钮的回调函数
    function plotButtonCallback(src,evt)
        % 获得工作空间的变量
        vars = get(listBox,'String');
        var_index = get(listBox,'Value');
        if length(var_index) ~= 2
            errordlg('You must select two variables',...
            'Incorrect Selection','modal')
        return
        end
        % 从基础工作空间中获得函数变量
        x = evalin('base',vars{var_index(1)});
        y = evalin('base',vars{var_index(2)});
        % 获得绘图命令
        selected_cmd = get(popUp,'Value');
        % 使用户图形界面的坐标轴为当前坐标轴并处理绘图命令选择
        axes(a)
        switch selected_cmd
        case 1 % plot方式绘图
            plot(x,y)
        case 2 % bar方式绘图
            bar(x,y)
        case 3 % stem方式绘图
            stem(x,y)
        end
    end 
    
% hold状态回调函数切换回调
    function holdToggleCallback(src,evt)
        button_state = get(src,'Value');
        if button_state == get(src,'Max')
            % 使回调函数为按下时的状态
            hold(a,'on')
            set(src,'String','Hold On')
        elseif button_state == get(src,'Min')
            % 为按下或选择时的状态
            hold(a,'off')
            set(src,'String','Hold Off')
        end
    end 

% 用户图形界面对象的布局

% 设置图形对象界面和默认属性值
f = figure('Units','characters',...
        'Position',[30 30 120 35],...
        'Color',panelColor,...
        'HandleVisibility','callback',...
        'IntegerHandle','off',...
        'Renderer','painters',...
        'Toolbar','figure',...
        'NumberTitle','off',...
        'Name','Workspace Plotter',...
        'ResizeFcn',@figResize);

% 创建底部面板图形对象
botPanel = uipanel('BorderType','etchedin',...
    'BackgroundColor',panelColor,...
    'Units','characters',...
    'Position',[1/20 1/20 119.9 8],...
    'Parent',f,...
    'ResizeFcn',@botPanelResize);

% 创建右侧面板图形对象
rightPanel = uipanel('bordertype','etchedin',...
    'BackgroundColor',panelColor,...
    'Units','characters',...
    'Position',[88 8 32 27],...
    'Parent',f,...
    'ResizeFcn',@rightPanelResize);

% 创建中间面板图形对象
centerPanel = uipanel('bordertype','etchedin',...
    'Units','characters',...
    'Position', [1/20 8 88 27],...
    'Parent',f);

% 在当前面板添加坐标轴,中间面板
a = axes('parent',centerPanel);

% 添加列表框和标签
listBoxLabel = uicontrol(f,'Style','text','Units','characters',...
        'Position',[4 24 24 2],...
        'String','Select Two Variables in Current Workspace',...
        'BackgroundColor',panelColor,...
        'Parent',rightPanel);
listBox = uicontrol(f,'Style','listbox','Units','characters',...
        'Position',[4 2 24 20],...
        'BackgroundColor','white',...
        'Max',10,'Min',1,...
        'Parent',rightPanel,...
        'Callback',@listBoxCallback);

% 添加弹出菜单和标签
popUpLabel = uicontrol(f,'Style','text','Units','characters',...
        'Position',[80 4 24 2],...
        'String','Choose Plot Type',...
        'BackgroundColor',panelColor,...
        'Parent',botPanel);
popUp = uicontrol(f,'Style','popupmenu','Units','characters',...
        'Position',[80 2 24 2],...
        'BackgroundColor','white',...
        'String',{'Plot','Bar','Stem'},...
        'Parent',botPanel);
    
% 添加hold和plot对象     
holdToggle = uicontrol(f,'Style','toggle','Units','characters',...
        'Position',[45 2 24 2],...
        'String','Hold State',...
        'Parent',botPanel,...
        'Callback',@holdToggleCallback);
plotButton = uicontrol(f,'Style','pushbutton','Units','characters',...
        'Position',[10 2 24 2],...
        'String','Create Plot',...
        'Parent',botPanel,...
        'Callback',@plotButtonCallback);
    
% 初始化列表框对象并保证hold按钮的属性值正确
    listBoxCallback(listBox,[])
    holdToggleCallback(holdToggle,[])  
end 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -