在 MATLAB GUI 中进行函数计算后隐藏工作区中的特定变量
Hiding specific variables in workspace after function calculations in MATLAB GUI
我在 Matlab 中使用 GUI 创建一些矩阵。我有一个带有 4 个复选框功能的面板,如下所示:
function checkbox1_Callback(hObject, eventdata, handles)
假设每个 复选框 计算这些矩阵 高度、质量、密度和功率 。当我单独检查每一个时,它正确地评估了请求的矩阵,但是我必须按照它们的顺序检查它们,因为每个的结果取决于前面的。我通过在每个函数中添加前面的代码来解决这个问题。当我计算密度时, 工作区 window 将密度以及高度和质量作为变量。我想在密度函数中使用一个命令,在计算之后,它只会出现在 workspace 中的密度矩阵。我用了下面两个
clearvars ('-except', 'density')
clear height mass
但似乎当我 运行 它时,它不起作用,因为它将所有变量保留在 工作区 , 但是 没有出现错误。当我 运行 它在 命令中时 window 它可以工作,但我想让它在函数内部工作。我怎样才能做到这一点?
关于您的 clearvars
问题,那是因为根据设计,该函数仅在调用它的范围内执行请求的清理。虽然乱用工作区变量并不是一个好主意(你有更好的选择,比如将数据存储在 GUI
句柄中并在完成后清除它们)......这是一个片段,基于你的例子,向您展示如何实现您的目标:
function myFunction()
% perform some calcunations...
evalin('base','clearvars(''-except'',''density'')');
end
evalin 函数允许在特定工作区(在本例中为基础 Matlab 工作区)内计算特定表达式(在本例中为 clearvars
调用)。但我建议你仔细调整它 veeeeery ,否则风险是处理其他非常重要的变量(我正在考虑管理当前 GUI
数据和处理程序的变量).
对于您目前的GUI
设计,我建议您彻底重新考虑一下。首先,您永远不应该更改常见且众所周知的控件的行为:我不希望在单击复选框时开始长达 10 分钟的计算;当我按下一个按钮时,我期待它。最重要的是,复选框很适合表达独立的选择,而不是连续的选择……所以改用下拉组合框:
Which variable do you want to calculate?
> Height
> Mass
> Density
> Power
用户在下拉列表 window 中选择一个值,然后按下按钮开始计算。然后计算将一次性执行,您的代码将通过检查组合框值知道何时停止。
我在 Matlab 中使用 GUI 创建一些矩阵。我有一个带有 4 个复选框功能的面板,如下所示:
function checkbox1_Callback(hObject, eventdata, handles)
假设每个 复选框 计算这些矩阵 高度、质量、密度和功率 。当我单独检查每一个时,它正确地评估了请求的矩阵,但是我必须按照它们的顺序检查它们,因为每个的结果取决于前面的。我通过在每个函数中添加前面的代码来解决这个问题。当我计算密度时, 工作区 window 将密度以及高度和质量作为变量。我想在密度函数中使用一个命令,在计算之后,它只会出现在 workspace 中的密度矩阵。我用了下面两个
clearvars ('-except', 'density')
clear height mass
但似乎当我 运行 它时,它不起作用,因为它将所有变量保留在 工作区 , 但是 没有出现错误。当我 运行 它在 命令中时 window 它可以工作,但我想让它在函数内部工作。我怎样才能做到这一点?
关于您的 clearvars
问题,那是因为根据设计,该函数仅在调用它的范围内执行请求的清理。虽然乱用工作区变量并不是一个好主意(你有更好的选择,比如将数据存储在 GUI
句柄中并在完成后清除它们)......这是一个片段,基于你的例子,向您展示如何实现您的目标:
function myFunction()
% perform some calcunations...
evalin('base','clearvars(''-except'',''density'')');
end
evalin 函数允许在特定工作区(在本例中为基础 Matlab 工作区)内计算特定表达式(在本例中为 clearvars
调用)。但我建议你仔细调整它 veeeeery ,否则风险是处理其他非常重要的变量(我正在考虑管理当前 GUI
数据和处理程序的变量).
对于您目前的GUI
设计,我建议您彻底重新考虑一下。首先,您永远不应该更改常见且众所周知的控件的行为:我不希望在单击复选框时开始长达 10 分钟的计算;当我按下一个按钮时,我期待它。最重要的是,复选框很适合表达独立的选择,而不是连续的选择……所以改用下拉组合框:
Which variable do you want to calculate?
> Height
> Mass
> Density
> Power
用户在下拉列表 window 中选择一个值,然后按下按钮开始计算。然后计算将一次性执行,您的代码将通过检查组合框值知道何时停止。