matlab - 设置 Matlab WindowButtonDownFcn 并保留默认行为
问题描述
我可以手动设置WindowButtonDownFcn
并有选择地覆盖右键或中键,同时保留默认行为吗?最终目标是通过单击将图形复制到剪贴板。
set(gcf,'WindowButtonDownFcn',@(src,~) disp(src.SelectionType)); %this seemingly always overwrites default behavior of figure click
我尝试了以下错误消息(向右滚动)
listener(gcf,'WindowButtonDownFcn',@(src,~) disp(src.SelectionType)) %Event 'WindowButtonDownFcn' is not defined for class 'matlab.ui.Figure'.
listener(get(gcf,'parent'),'WindowButtonDownFcn',@(src,~) disp(src.SelectionType)) %Event 'WindowButtonDownFcn' is not defined for class 'matlab.ui.Root'
handle(gcf).addlistener(handle(gcf),'WindowButtonDownFcn',@(src,~) disp(src.SelectionType)) %Unrecognized method, property, or field 'addlistener' for class 'matlab.ui.Figure'.
handle
以及使用andevent.listener
没有成功的更多排列
在 Matlab 2019a 中测试。
编辑:这是一个模板函数,可与基于 matlabgui's kind answer 的修饰符一起使用
%copies figure to clipboard when [control]+[right-click] anywhere on figure window (and leaving default functionality intact)
figure; plot(randi(100,1,100)) %random figure
addlistener ( gcf, 'WindowMousePress', @(src,~) myFavFunc(src,[]))
function myFavFunc(src,~)
if strcmp(src.SelectionType,'alt') && numel(src.CurrentModifier)==1 && strcmp(src.CurrentModifier,'control')
print -clipboard -dmeta
disp('copied figure to clipboard')
end
end
解决方案
我不知道为什么Matlab隐藏了一些数字事件,你可以在这里得到一个列表:
hFig = figure;
mc = metaclass(hFig);
disp ( {mc.EventList.Name}' ) ;
然后,您可以根据该信息将侦听器添加到鼠标按下事件:
hFig = figure;
addlistener ( hFig, 'WindowMousePress', @(src,~)disp('myCallback' ))
这将单独保留标准图形回调,而不是使用 disp 命令让它运行一个函数,您可以在其中查看图形属性SelectionType
以确定按下了哪个鼠标按钮。您可以扩展它以使用该属性来CurrentModifier
确定是否按下或被按下以进一步自定义它。Ctrl
Shift
Alt
推荐阅读
- sql - MySQL - 如何根据另一列中的唯一值转置一列中的单元格?
- google-oauth - Nuxtjs 谷歌身份验证
- linux - 是否可以让 nvidia-smi 命令从任何位置(如 Linux)在 Windows 上运行?
- azure-hdinsight - HDInsight 群集如何作为 HDFS 映射到 Azure 存储?
- java - 我收到此错误原因:java.lang.ClassNotFoundException: javafx.scene.Node 在 Ubuntu Tomcat 服务器中部署战争
- node.js - 创建新项目时 JSON 输入错误意外结束
- reactjs - 我们应该为 Redux 状态使用 PropTypes 吗?
- python-3.x - 升级到 Ubuntu 20.04 后,python 3.7 venv 损坏
- javascript - 如何以在 javascript 中创建的表单中获取表单 foreach 循环选项值?
- python - Django 无法使用 ForeinKey 保存记录