将 GUIDE 与面向对象的 MATLAB 结合使用?

2024-04-05

我有一个面向对象的 MATLAB 应用程序,需要 GUI,并且我想使用 GUIDE 进行布局(至少)。我尝试过手动方式,但控制定位太痛苦了。

我注意到 GUIDE 非常注重程序;它生成 M 文件,假设它们从路径运行并且不与任何类或对象关联。

有没有人有过尝试以面向对象的方式使用 GUIDE 的经验?如果很简单,我也想做自动代码生成,但我愿意让 GUIDE 生成 .fig 文件并自己编写代码。


当您创建带有指南的 gui 时,对于您放在窗格上的每个按钮/文本框/图形等,它会自动生成必要的回调的 shell,因此您所要做的就是填写代码。如果您更改小部件的名称(它们的“标签”)或添加或删除它们,它会为您更新您的 m 文件,这很方便。

You can将你的 GUI 与对象关联起来;自动生成的 m 文件的函数大纲如下所示

function YourGUIName_OpeningFcn(hObject, eventdata, handles, varargin)

您可以要求某人通过 varargin 向您的 gui 传递一个或多个对象。执行此操作的规范 matlab 方法是传递参数名称/值对,因此来自命令行的调用如下所示

YourGuiName('importantobject', object1);

但您也可以(特别是如果只有一个唯一参数)假设 varargin{1} 是一个特定参数,varargin{2} 是第二个参数,依此类推

在这种情况下,来自命令行的调用将是

YourGuiName(object1);

在你的 openingfcn 中,你可以添加一行像

if (length(varargin) < 1) || ~isa(varargin{1}, 'importantObjectType')
     error ('you must pass an importantobject to YourGuiName, see help');
end
myimportantobject = varargin{1}

您现在可以做出选择。在 GUI 中存储数据的规范正确方法是将其放入句柄结构中,然后将其与 guidata 一起存储,如下所示

handles.myobject = varargin{1};
guidata(hObject, handles); %this is just boilerplate 

样板文件是必要的,因为尽管它的名称如此,句柄并不是 Handle 的子类,并且是按值而不是引用传递的。 guidata 命令将句柄粘贴到与 gui 图相关的某个位置,以便您可以在后续回调中获取它。

这种方法的问题在于,当您将一个大对象放入句柄中时,它会使 guidata 命令永远运行。即使 MATLAB 在按值传递时不应该复制数据(除非绝对必要),情况也是如此,而且如果您的对象是 Handle(需要 4 个字节来来回传递),情况也是如此。不要问我为什么,但我怀疑这与内存管理和垃圾收集有关。

如果你的 gui 需要一段时间来执行命令,并且你使用 profile 并看到它挂在 guidata 命令上,那么你应该将你的对象声明为全局对象并以这种方式处理它

global YOURGUI_object;  %it's not my fault; blame MATLAB
YOURGUI_object = varargin{1};

然后,您可以让所有回调执行它们需要的 YOURGUI_object 的任何方法。

祝你好运。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 GUIDE 与面向对象的 MATLAB 结合使用? 的相关文章

  • Matlab:如何显示数组的“真实”值?

    我有一个在脚本中计算的向量 计算后 我将值显示到命令窗口 显示如下 finalResults 1 0e 05 0 0001 0 0 0005 0 0002 0 0001 0 0027 0 0033 0 0001 0 0000 0 0000
  • MATLAB中如何画水平线和垂直线?

    我目前正在尝试在 MATLAB 中绘制简单的垂直线和水平线 例如 我想绘制线 y 245 我该怎么做呢 MATLAB 根据您提供的向量逐点进行绘图 因此 要创建一条水平线 您需要改变x同时保持y对于垂直线恒定 反之亦然 xh 0 10 yh
  • Matlab PARFOR 循环可以通过编程方式打开/关闭吗?

    有一个关于 MATLAB 中 parfor 的简单问题 我想在程序中设置一个标志 以便在 parfor 和常规 for 循环之间进行更改 基本上 我需要此功能 以便我的代码的某些部分可以在 调试 模式下更新图形 然后当关闭该标志时 使用 p
  • 检查Matlab中脚本需要使用的函数

    我有一个别人写的代码包 我正在运行一个脚本 它调用一些函数 这些函数又调用更多函数 等等 我想获取不是 MATLAB 内置函数但属于包的一部分的函数列表 我尝试使用matlab codetools requiredFilesAndProdu
  • Matlab - 如果值包含xxx,则删除元胞数组中的行

    在 Matlab 中 如何删除包含变量字符串的元胞数组中的元胞 假设我的元胞数组是 C svnTrunk RadarLib radarlb utilities scatteredInterpolant m C svnTrunk RadarL
  • Simulink 仿真引擎如何工作?

    我想了解 Simulink 仿真引擎的工作原理 它是否使用离散事件模拟机制 那么如何处理连续时间 它是否依赖于基于静态循环的代码生成 或者 在第一个周期之前 它会计算出块的执行顺序 从不需要任何其他块输入的块开始 每个周期 它都会根据输入和
  • 为什么旋转 3D 点云后顶点法线会翻转?

    我有两个人脸 3D 点云样本 蓝色点云表示目标面 红色点云表示模板 下图显示目标面和模板面在不同方向上对齐 目标面大致沿 x 轴 模板面大致沿 y 轴 Figure 1 The region around the nose is displ
  • MATLAB 特征函数

    我很好奇哪里可以找到完整的描述FEATURE功能 它接受哪些论点 没有找到文档 我只听说过memstats and getpid 还要别的吗 gt gt which feature built in undocumented 注意 更完整的
  • Matlab 和 Python 中的优化算法(dog-leg trust-region)

    我正在尝试使用 Matlab 和 Python 中的狗腿信赖域算法求解一组非线性方程 在Matlab中有fsolve https www mathworks com help optim ug fsolve html其中此算法是默认算法 而
  • 括号中的波形符字符

    在 MATLAB 中 以下代码执行什么操作 m func returning matrix 波浪号运算符 的作用是什么 在 Matlab 中 这意味着不要将函数中相应的输出参数分配到赋值的右侧 因此 如果func returning mat
  • matlab中的正则逻辑回归代码

    我正在尝试正则化 LR 在 matlab 中使用以下公式很简单 成本函数 J theta 1 m sum y i log h x i 1 y i log 1 h x i lambda 2 m sum theta j 梯度 J theta t
  • 通过 Matlab 访问 Physionet 的 ptbdb 中的数据库

    我首先设置系统 old path which rdsamp if isempty old path rmpath old path 1 end 8 end wfdb url http physionet org physiotools ma
  • 访问图像的 Windows“标签”元数据字段

    我正在尝试进行一些图像处理 所以现在我正在尝试读取图像 exif 数据 有 2 个内置函数可用于读取图像的 exif 数据 问题是我想读取图像标签 exifread and imfinfo这两个函数都不显示图像标签 Is there any
  • “Desort”向量(撤消排序)

    在Matlab中 sort返回排序后的向量和索引向量 显示哪个向量元素已移动到以下位置 v ix sort u Here v是一个包含所有元素的向量u 但已排序 ix是一个向量 显示每个元素的原始位置v in u 使用 Matlab 的语法
  • 图像处理 - 使用 opencv 进行服装分割

    我正在使用 opencv 进行服装特征识别 第一步 我需要通过从图像中移除脸部和手来分割 T 恤 任何建议表示赞赏 我建议采用以下方法 Use 阿德里安 罗斯布鲁克的用于检测皮肤的皮肤检测算法 谢谢罗莎 格隆奇以获得他的评论 在方差图上使用
  • Matlab dec2bin 给出错误的值

    我正在使用 Matlab 的 dec2bin 将十进制数转换为二进制字符串 但是 我得到了错误的结果 例如 gt gt dec2bin 13339262925365424727 ans 101110010001111010010100111
  • MATLAB:在不使用循环的情况下提取矩阵的多个部分

    我有一个巨大的 2D 矩阵 我想从中提取 15 个不同的 100x100 部分 我有两个向量 x 和 y 其中保存了零件的左上角索引 我用过这样的东西 result cam1 x 1 end x 1 end 99 y 1 end y 1 e
  • 检测分段常数信号中的阶跃

    我有一个分段恒定信号 如下所示 我想检测步骤转换的位置 标记为红色 我目前的做法 使用移动平均滤波器平滑信号 http www mathworks com help signal examples signal smoothing html
  • 读出 Matlab / Octave fft2() 函数输出的特定点

    我正在熟悉 Octave 及其功能fft2 在此玩具示例中 我的目标是生成以下 256 x 256 png 图像的 2D DFT 为了能够轻松理解输出 我尝试将此图像转换为 256 x 256 图像 消除颜色信息 Im imread cir
  • 将 Matlab 的 datenum 格式转换为 Python

    我刚刚开始从 Matlab 迁移到 Python 2 7 在读取 mat 文件时遇到一些问题 时间信息以 Matlab 的日期数字格式存储 对于那些不熟悉它的人 日期序列号将日历日期表示为自固定基准日期以来已经过去的天数 在 MATLAB

随机推荐

  • 将 Autofac 添加到 WPF MVVM 应用程序

    我似乎无法找到解决这个问题的方法 我已经看到了几个与此相关的问题 但没有一个真正给我解决方案 我对 Autofac 完全陌生 并没有真正做过太多 WPF MVVM 但了解基础知识 我有一个 WPF 应用程序 使用 ModernUI for
  • ASP.NET Core MVC 相当于启动操作特定页面

    In ASP NET Webforms or ASP NET MVC项目中 我可以在按F5进行调试时选择浏览器中正在调用的页面 路由 如下图所示 相当于什么ASP NET Core MVC 我在用着IIS Express with SSL用
  • 错误:如果没有列“date_time”(在分区中使用),则无法创建唯一索引

    我刚开始使用时间刻度数据库 https www timescale com 与 postgresql 我有一个名为storage db其中包含一个名为day ahead prices 安装 timescaledb 后 我正在关注从同一个 p
  • angularjs从json文件中获取ng-repeat数据非常慢

    我有一个 json 文件 其中包含大约 8000 个联系人 使用 ng repeat 使用 angularjs 获取所有数据需要很长时间 有解决办法吗 检索如此大的记录时 您不能期望有很高的速度 您可以使用以下方法优化 ng repeat
  • 我的线程可以帮助操作系统决定何时将其上下文切换吗?

    我正在 Linux 上用 C 开发一个线程应用程序 它试图实现实时 根据心跳执行操作 或者尽可能接近实时 在实践中 我发现操作系统正在交换我的线程 并导致切换时延迟长达十分之一秒 从而导致心跳不规则 有没有一种方法可以让我的线程向操作系统暗
  • 在 Visual Studio Code 中调试 C++ 时如何读取输入?

    我在用着VSCode用于调试我的CPP程序在MacOSX 我有2个程序 Program1 int main string a a a a b cout lt
  • 如何:仅 100% 高度表滚动 tbody

    是否可以使用 CSS 滚动 100 高度表格的内容而不是标题 并且仅将滚动条显示到 tbody 内容的一侧而不是标题行 谢谢 我希望现在还不算太晚 你还活着 从那时起事情已经有了很大的改善 您可以使用 table display inlin
  • 如何在仅标头库中拥有静态数据成员? [复制]

    这个问题在这里已经有答案了 在非模板化库类中拥有静态成员的最佳方法是什么 而不将定义成员的负担强加给类用户 假设我想提供这个课程 class i want a static member static expensive resource
  • js中的parcel和全局变量

    我有一个简单的 HTML 文件 其中包含一些简单的 javascript 文件 没有框架 没有模块 有一个主 JS 文件和其他 JS 文件中的辅助函数 当我将其作为静态站点打开时 一切正常 一个文件中的 JS 代码能够调用另一文件中定义的函
  • MongoDB从子文档中删除子文档

    我使用 MongoDB 的 10gen C 驱动程序 我想从子文档中删除子文档 我不知道该怎么做 这是我的文档的示例 id binary stuff Name MyApplication Settings id binary stuff K
  • 带有子元素的 Solr 文档?

    是否可以以某种方式创建包含子元素的 solr 文档 例如 我将如何表示这样的事情
  • Rails 3 与成员的路由错误

    我在 Rails 3 中有以下路线 resources jobs do member do post seller job submitted end end 以及下面的表格 form for job url gt seller job s
  • 如何从InputStream转换为AudioInputStream

    是否可以从 InputStream 转换为 AudioInputStream 我想在某些事件中播放小声音文件 所以我做了以下 SoundThread import java io import javax sound sampled pub
  • Git-Tf 移动大型 Tfs 项目的部分内容

    我和我的团队有一个大型 TFS 项目 其中包含许多 Visual Studio 解决方案和许多项目 我们正在将该项目拆分为更小的逻辑部分 并将这些部分移动到单独的 git 存储库中 我已经开始查看 git tf 以便我们可以保留文件的历史记
  • 查询RealmList中封装的嵌套Realm对象到RealmResults中

    我有以下 RealmObject public class City extends RealmObject private String cityId private RealmList
  • C# - 如何在按下按键时停止循环? [复制]

    这个问题在这里已经有答案了 目前我正在使用这段代码 using System namespace Project class MainClass public static void Main string args bool key fa
  • 在 Excel 中打开并编辑 *.gsheet 文件

    我已将 Google Drive 应用程序下载到我的 Windows 7 Ultimate 计算机上 现在 当我转到该文件夹 并查看我的电子表格时 它采用某种名为 gsheet 的奇怪格式 现在这个文件没有被Excel打开 好像我需要提一下
  • VS Code + rust-analyzer 可以在代码中插入嵌入提示吗?

    我用 Rust 写作 但其他语言可能也是如此 当我输入例如let x 5 vscode显示let x i32 5 其中 i32部分是镶嵌提示 有什么办法让 vscode 将该提示插入到实际代码中吗 是的 如果你击中Ctrl 然后使用箭头键选
  • 如何在java类中访问WEB-INF文件夹下的文件

    我在 Web 应用程序中有一个普通的 java 类 并且想要读取下面的配置文件WEB INF文件夹 我知道访问该文件的方法 如果它位于类路径中 WEB INF classes文件夹 自从WEB INF classes文件夹的目的是 clas
  • 将 GUIDE 与面向对象的 MATLAB 结合使用?

    我有一个面向对象的 MATLAB 应用程序 需要 GUI 并且我想使用 GUIDE 进行布局 至少 我尝试过手动方式 但控制定位太痛苦了 我注意到 GUIDE 非常注重程序 它生成 M 文件 假设它们从路径运行并且不与任何类或对象关联 有没