matlab实现鼠标、键盘控制十字光标移动

想要实现和交易平台中行情图中:鼠标移动到相应位置显示对应数据以及画出十字光标,此时点击键盘右键则十字光标向右移动并更新显示框中的数据,点击键盘左键则十字光标向左移动并更新显示框中的数据。

最初写的是键盘操作是每次都从鼠标所在位置读入坐标点,导致:

最初x0=1,点击左键x1=1,再次点击无法移动;点击右键x2=2,再次点击右键无法移动。

即:每次都以x0=1为起点移动,且只能移动一次。

#鼠标操作
function figure1_WindowButtonMotionFcn(hObject, eventdata, handles)

#获取鼠标位置
currPt = get(gca, 'CurrentPoint');
x0 = currPt(1,1);
y0 = currPt(1,2);

Xminmax = get(gca,'Xlim');
Yminmax = get(gca,'Ylim');
if Xminmax(1)<=x0&&x0<=Xminmax(2)&&Yminmax(1)<=y0&&y0<=Yminmax(2)
    x0=round(x0);
    #画出十字坐标线
    try
        set(handles.A,'XData',Xminmax,'YData',[y0,y0]);%水平线
        set(handles.B,'XData',[x0,x0],'YData',Yminmax);%竖直线
    catch
        handles.A = line(Xminmax,[y0,y0],'Color','magenta');
        handles.B = line([x0,x0],Yminmax,'Color','magenta');
        guidata(hObject, handles);
end

% 键盘操作
function figure1_WindowButtonMotionFcn(hObject, eventdata, handles)

% 获取x0,y0,用于后续操作
keyReleased = get(gcf, 'CurrentKey');
x0 = get(handles.A, 'XData');
y0 = get(handles.B, 'YData');
 
% 改变x0,y0的值,从而改变十字坐标线
if strcmp(keyReleased, 'rightarrow')
    x0 = x0 + 1;
elseif strcmp(keyReleased, 'leftarrow')
    x0 = x0 - 1;
else
    return;
end
Xminmax = get(gca,'Xlim');
Yminmax = get(gca,'Ylim');
if Xminmax(1)<=x0&&x0<=Xminmax(2)&&Yminmax(1)<=y0&&y0<=Yminmax(2)
    x0=round(x0);
    #画出十字坐标线
    try
        set(handles.A,'XData',Xminmax,'YData',[y0,y0]);%水平线
        set(handles.B,'XData',[x0,x0],'YData',Yminmax);%竖直线
    catch
        handles.A = line(Xminmax,[y0,y0],'Color','magenta');
        handles.B = line([x0,x0],Yminmax,'Color','magenta');
        guidata(hObject, handles);
end

在这里陷入僵局,想了很久,最终:

设置坐标的全局变量,通过一个函数单独读取鼠标所在位置并传递给键盘函数。 

#单独获取鼠标坐标位置,以供键盘使用
function axes1_ButtonDownFcn(hObject, eventdata, handles)
global x2;
global y2;
 
axes(handles.axes1);
currPt = get(gca, 'CurrentPoint');
x2 = currPt(1,1);
y2 = currPt(1,2);

#鼠标操作
function figure1_WindowButtonMotionFcn(hObject, eventdata, handles)

axes1_ButtonDownFcn(hObject, eventdata, handles)#因为matlab按照顺序执行,跳转到鼠标函数后依然需要实时更新axes1_ButtonDownFcn函数,保证键盘接受到的是此刻的鼠标所在位置

#获取鼠标位置
currPt = get(gca, 'CurrentPoint');
x0 = currPt(1,1);
y0 = currPt(1,2);

Xminmax = get(gca,'Xlim');
Yminmax = get(gca,'Ylim');
if Xminmax(1)<=x0&&x0<=Xminmax(2)&&Yminmax(1)<=y0&&y0<=Yminmax(2)
    x0=round(x0);
    #画出十字坐标线
    try
        set(handles.A,'XData',Xminmax,'YData',[y0,y0]);%水平线
        set(handles.B,'XData',[x0,x0],'YData',Yminmax);%竖直线
    catch
        handles.A = line(Xminmax,[y0,y0],'Color','magenta');
        handles.B = line([x0,x0],Yminmax,'Color','magenta');
        guidata(hObject, handles);
end

% 键盘操作
function figure1_WindowButtonMotionFcn(hObject, eventdata, handles)
global x2;
global y2;

keyReleased = get(gcf, 'CurrentKey');
if strcmp(keyReleased, 'rightarrow')
    x2 = x2 + 1;
elseif strcmp(keyReleased, 'leftarrow')
    x2 = x2 - 1;
else
    return;
end

Xminmax = get(gca,'Xlim');
Yminmax = get(gca,'Ylim');
if Xminmax(1)<=x2&&x2<=Xminmax(2)&&Yminmax(1)<=y2&&y2<=Yminmax(2)
    x2=round(x2);
    try
        set(handles.A,'XData',Xminmax,'YData',[y2,y2]);
        set(handles.B,'XData',[x2,x2],'YData',Yminmax);
    catch
        handles.A = line(Xminmax,[y2,y2],'Color','magenta');
        handles.B = line([x2,x2],Yminmax,'Color','magenta');
        guidata(hObject, handles);
    end  

axes1_ButtonDownFcn函数和 figure1_WindowButtonMotionFcn函数的区别:

https://blog.csdn.net/smf0504/article/details/51831496

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 在MATLAB中,键盘输入指令是指以程序的形式从键盘接收并处理输入的指令。它提供了一种方便的方法来与MATLAB交互,通过从键盘读取输入来控制MATLAB程序。 MATLAB中常用的键盘输入指令包括input、str2num等。其中input函数可以用于从键盘读取用户输入的字符或数字,并将其存储为变量以供程序后续使用。而str2num函数可以用于将字符串类型的输入转换为数字型数据,以进行进一步的计算和处理。 除此之外,MATLAB还支持通过键盘输入指令来进行交互式绘图、调试和数据分析等操作。例如,在绘制某个函数的图像时,用户可通过键盘输入指令来调整图像的显示范围和分辨率,以达到更好的效果。 总之,MATLAB键盘输入指令为用户提供了一种简便的方法来输入和控制MATLAB程序。通过输入不同的指令,用户可以实现不同的操作和功能,从而让程序更加灵活和高效。 ### 回答2: Matlab是一种广泛应用于科研和工程计算的软件,它具备强大的计算能力、友好的用户界面以及丰富的工具箱,因此备受欢迎。Matlab支持用户使用键盘输入命令,这是提高Matlab使用效率的一个重要手段。 在Matlab中,按下键盘上的Ctrl + C键可以中断正在运行的程序;Ctrl + L键可以清除Matlab主窗口;Ctrl + D键可以停止运行程序;Ctrl + E键可以在编辑器中打开选中文件或者在命令窗口中打开上一次使用编辑器编辑的文件。 而当我们需要在命令行窗口中输入某个 Matlab 命令或者函数时,可以直接在命令行窗口中输入对应的命令。例如需要求两个数的和,输入 a+b 即可。Matlab 还支持一些简单的算术运算,如加减乘除以及指数等。 除此之外,Matlab 还支持用户自定义快捷方式,可以在“开始”菜单中寻找 Matlab 的图标,右键选择“属性”,然后点击捷径选项卡,可以查看已设置的快捷方式,在这里可以自定义快捷键或改变现有的快捷键。 综上所述,Matlab 键盘输入指令是一种非常方便快捷的操作方法,可以大大提高用户的操作效率,加快工作进度,同时还可以简化操作流程,为Matlab的使用带来便利。 ### 回答3: MATLAB是一种非常强大的编程工具,可以帮助用户简化数值计算和数据分析。在MATLAB中,键盘输入指令可以让用户通过键盘输入来执行不同的操作或者控制程序的运行。 MATLAB键盘输入指令的语法格式非常简单,一般形式为: input(prompt) 其中,prompt是一个字符串,用于提示用户输入信息。 例如,如果用户想让程序从键盘输入两个数并相加,可以使用以下的MATLAB代码: a = input('请输入第一个数:'); %提示用户输入第一个数 b = input('请输入第二个数:'); %提示用户输入第二个数 c = a + b; %将两个数相加 disp(['结果为:', num2str(c)]); %将结果输出到屏幕上 在这个例子中,用户会看到程序输出的两个提示信息,分别是“请输入第一个数”和“请输入第二个数”。用户可以根据提示信息,从键盘输入两个数,然后程序将这两个数相加,并输出结果。 除了input函数,MATLAB还提供了其他的键盘输入指令,例如: 1. ginput(n):等待用户从图形窗口中选择n个点,并将这些点的坐标作为向量返回。 2. keyboard:当程序执行到这个指令时,会暂停程序,让用户在命令窗口中直接输入MATLAB指令,以便进行调试或者测试。 3. pause:让程序在指定时间内暂停执行,等待用户按任意键继续程序的运行。该指令可以用于程序的调试或者在程序执行过程中暂停一下以便查看运行结果。 总之,MATLAB键盘输入指令可以帮助用户实现更加灵活的编程操作,提高编程的效率和质量。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值