将 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 结合使用? 的相关文章

  • Microsoft Visual C++ 2008 和 R2007b 的 Mex 类型

    我想对 vs2008 和 matlab2007b 使用 mex 类型 我尝试了下面的代码 include
  • 如何选择部分密集数据集的均匀分布子集?

    P是一个 n d 矩阵 持有nd 维样本 P某些地区的密度是其他地区的几倍 我想选择一个子集P其中任意样本对之间的距离大于d0 并且我需要将其传播到整个区域 所有样本都具有相同的优先级 无需优化任何内容 例如覆盖面积或成对距离之和 这是执行
  • 在 MATLAB 中将数据拟合到 B 样条

    我正在尝试估计矩阵形式的时间序列数据中的缺失值 列代表时间点 即现在 我想将矩阵的每一行拟合到 B 样条曲线 并用它来估计缺失值 我可以使用 MATLAB 将数据拟合到普通样条曲线 但我完全陷入尝试找出如何拟合数据以创建 B 样条曲线的困境
  • 如何获取活动对象 MATLAB GUI 的句柄

    我正在尝试使用 MATLAB GUI 创建日历 我有两个Edit Text对象 edittext1 and edittext2 我想做这个 我把光标放在edittext1然后在日历中选择日期 它会进入文本字段edittext1 同样对于ed
  • 如何以编程方式指定 MATLAB 编辑器键绑定

    我想将键盘键绑定设置为Windows 默认设置我想在启动时使用startup m因为我希望在大量系统上设置此设置 首选项对话框中的等效设置是 MATLAB gt Keyboard gt Shortcuts gt Active Setting
  • 如何从绘图处理程序中绘图?

    我有绘图的处理程序或图形的处理程序 例子 h plot 1 0 2 10 xx get h xx DisplayName Annotation 1x1 handle Color 0 0 1 LineStyle LineWidth 0 500
  • 傅里叶变换定理 matlab

    我目前正在尝试理解二维傅里叶位移定理 根据我到目前为止所了解到的情况 图像空间中的平移会导致相位差异 但不会导致频率空间中的幅度差异 我试图用一个小例子来演示这一点 但它只适用于行的移位 而不适用于列的移位 这是一个小演示 我只在这里显示幅
  • 从 Java 运行 MATLAB 函数

    我在 MATLAB 中有一个 m 文件 我想从 Java 调用该文件 并以字符串或 Java 中的任何形式获取解决方案 这听起来很简单 但由于某种原因我无法让它发挥作用 我试过这个 matlab nosplash wait nodeskto
  • 从筛查乳腺 X 光检查数字数据库 (DDSM) 获取数据

    我正在尝试以可读格式获取 DDSM 数据集 有谁有 DDSM heathusf 程序的工作版本 可以在 Linux 或 Windows 上正常运行吗 我知道 DDSM 的 jpeg 程序有一个适用于 linux 的工作版本 位于http w
  • 动态调整自定义刻度数

    Taking SO 的一个例子 https stackoverflow com a 7139485 97160 我想根据当前视图调整轴刻度 这是默认行为 除非设置自定义的刻度数 下图展示了由此产生的行为 左侧是默认行为 右侧是带有自定义刻度
  • 如何为已编译的 MATLAB 创建安装程序并要求用户接受我们的许可条款?

    我正在 MATLAB 中编写程序分发给 Windows 用户 我使用 MATLAB 编译器和 MATLAB r2014a 版本来创建程序 我可以使用 MATLAB 应用程序编译器创建 Windows 安装程序 并且它的工作效果可以接受 但是
  • 从 MATLAB 调用 Java?

    我想要Matlab程序调用java文件 最好有一个例子 需要考虑三种情况 Java 内置库 也就是说 任何描述的here http docs oracle com javase 6 docs api 这些项目可以直接调用 例如 map ja
  • 如何在Matlab中打印带有千位分隔符的整数?

    我想使用逗号作为千位分隔符将数字转换为字符串 就像是 x 120501231 21 str sprintf 0 0f x 但随着效果 str 120 501 231 21 如果内置fprintf sprintf做不到 我想可以使用正则表达式
  • 如何正确从表中删除 NaN 值

    在 Matlab 中阅读 Excel 电子表格后 不幸的是 我的结果表中包含了 NaN 例如这个 Excel 表格 将产生此表 其中出现额外的 NaN 列 我尝试使用以下代码片段删除 NaN measurementCells readtab
  • MATLAB 编译器与 MATLAB 编码器

    两者有什么区别 据我了解 MATLAB Compiler将MATLAB代码包装成 exe文件 这样就可以在不安装MATLAB的情况下使用它 并且只需要MCR 除此之外 MATLAB Builder NE 还可以用于生成与 Net 框架一起使
  • matlab中无限while嵌套在for循环中

    我想做一个while循环 嵌套在for在 Matlab 中循环以查找数据中不同对之间的距离 我的数据具有以下形式 ID lon lat time 1 33 56 40 89 803 2 32 45 41 03 803 3 35 78 39
  • 在matlab中不使用for循环检查数组中的成员资格

    我想简化这段代码 使其无需 for 循环即可工作 for i 1 N for j 1 N if ismember j A PID i i TFP i j PID i i end end end 其中A是一个包含一些标签的矩阵 我之前存储的T
  • Ilnumerics Ilpanel 在 winform 中编译成 dll 并加载到 matlab 时不激活

    我想将 Visual studio 2012 中用 C 编写的 winform 编译为 dll 然后将其加载到 matlab 2013a 中 然后 我想使用 matlab net 接口与 winform 进行交互 侦听其事件并通过一组预定义
  • FMINCON 的替代方案

    除了 fmincon 之外还有其他更快 更高效的求解器吗 我正在使用 fmincon 来解决特定问题 但对于中等大小的向量变量来说 我的内存不足 我也没有任何超级计算机或云计算选项可供使用 我知道任何替代解决方案仍然会耗尽内存 但我只是想看
  • 如何将数据传递给 MATLAB oncleanup 函数?

    我有一个编译好的 matlab 程序 可以自动调整机器参数 在调整周期结束时 我需要恢复一些原始设置 有时会发生意外错误 有时用户会发现调整算法未正常工作 因此应终止 使用 control C 如果发生可预测的错误 我可以使用 try ca

随机推荐

  • 将 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 文件 假设它们从路径运行并且不与任何类或对象关联 有没