【问题标题】:MATLAB callback when saving figure file保存图形文件时的MATLAB回调
【发布时间】:2015-06-15 08:51:24
【问题描述】:

我需要以编程方式检查无花果(指南)文件是否已保存,所以基本上我需要在以下情况下进行回调:

myfigure_SavedCallback(hObject, varargin)

我没有在网上找到任何东西,所以我想这是不可能的,有人可以验证吗?

已解决:

所以我刚刚发现了如何自己做到这一点。在指南编辑器中,您可以打开 Toolbar Editor 并更改 gui 通常具有的所有图标按钮。在某处字段Clicked Callback。您可以输入常规的回调形式,例如

mygui('uipushtool2_ClickedCallback',hObject,eventdata,guidata(hObject))

并将此回调添加到代码中。在该特定回调中,如有必要,可以处理已保存/未保存的 UD 标志。

【问题讨论】:

  • 您应该将找到的解决方案作为答案发布,而不是作为问题的一部分。

标签: matlab callback matlab-guide


【解决方案1】:

没有,据我所知,保存时执行的图形(或其他 HG 组件)没有回调。

但是,我认为您可以解决此问题。您可以创建自己的对象,在保存时执行代码 - 如下所示:

classdef mytest < handle    
    methods         
        function sobj = saveobj(obj)
            sobj = obj;
            disp('saved') % Put your code here
        end        
    end    
end

然后您可以创建这些对象之一,并将其​​存储在例如图的UserData 属性中。当图形被保存时,对象也会被保存,任何你想要的代码都会被执行。

我想在某些方面,上述解决方法可能会被用户可以做的各种事情打败。但稍加注意,它可能足以满足您的需求。

【讨论】:

  • 有趣,但是,我发现您实际上可以将回调传递给保存函数,请参阅编辑后的帖子。
  • 也许您编辑中提到的解决方案满足您的需求。但这并不是图中真正的回调,它只是使用工具栏按钮将您自己的保存功能添加到 GUI 中。特别是,如果用户在命令行中使用saveashgsave 命令手动保存图形用户界面图形,它将不会被执行。
【解决方案2】:

检查图像是否手动保存:

您可以检查图形的Filename字段是否为空。保存图形后,它会立即获取已保存图形的路径。

运行代码并自己手动保存图形。

clc
close all
clear

img = imread('cameraman.tif');

h = figure(1);
imshow(img);

while(isempty(h.FileName))
    clc
    disp('not saved yet');
    pause(0.3)
end

disp('saved in:');
disp(h.FileName);

这会给你:

not saved yet
saved in:
C:\Users\samuel\Desktop\fig.fig
>> 

【讨论】:

  • 感谢您的努力,不幸的是,这绝对不是我想要的。我不知道用户将如何命名 fig 文件,所以我无法检查它是否已经存在。我在问题中确实提到过,我需要在保存 fig 文件(它是一个 guide-fig 文件)后运行一些代码......
  • 嗯,您需要以某种方式识别图形,只需使用一个以 false 开头并在用户保存时为 true 的布尔值。
  • 这是我的问题,你怎么知道这个数字被保存了?
  • 对不起,这太平庸了。我的问题又是:如何检查用户是否手动保存了图像。因此,我需要一个回调或其他什么来检查用户何时保存文件。
  • 再一次,因为它是一个 GUIDE 无花果文件,所以这行不通!那些已经有一个文件名并将它们保存为另一个文件不会更改“文件名”属性。
【解决方案3】:

所以我只是自己发现了如何做到这一点。在指南编辑器中,您可以打开工具栏编辑器并更改 gui 通常具有的所有图标按钮。在某处单击了回调字段。您可以输入常规的回调形式,例如

mygui('uipushtool2_ClickedCallback',hObject,eventdata,guidata(hObject))

并将此回调添加到代码中。在该特定回调中,如有必要,可以处理已保存/未保存的 UD 标志。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-25
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    相关资源
    最近更新 更多