GUI处理调用脚本后消失

5视图(30天)
我有一个大的GUI,更新几个轴图来响应用户输入。应用程序使用一个脚本来执行策划的各种轴。我附上了一个小例子,演示了这个问题。我第一次点击按钮,一切按预期执行。然而,如果我点击任何按钮一次我得到了错误:
错误使用父情节必须是一个标量图形处理。
错误testPlotScript(第3行)情节(testAxisView handles.testData。x, handles.testData.y);
错误ScriptCalledByCallbackTest > pushbutton1_Callback(第86行)testPlotScript ();…
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
不知何故,GUI处理正在消失。
第一个按钮推动:# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
testAxisView =
轴(axes1)属性:
XLim (0 - 1):
YLim (0 - 1):
XScale:“线性”
YScale:“线性”
GridLineStyle:“- - -”
位置(55.1429 - 8.2452 39.1429 - 17.7500):
单位:“角色”
显示所有属性
第二个按钮推动:# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
testAxisView =
0×0空GraphicsPlaceholder数组。
我怎么解决这个问题呢?

接受的答案

本杰明·克劳斯
本杰明·克劳斯 2018年7月26日
问题是你的电话 findobj HandleVisibility 的人物。
当你打电话 findobj ,你不指定搜索所需的轴。因为你没有指定在哪里看,MATLAB中寻找“根对象”。有效, findobj 是开始 大的 (根对象),并要求所有的孩子。然后检查所有的孩子是否轴。然后检查孩子的孩子是否轴,等。然而,因为 HandleVisibility 图的设置 回调 ,这个数字是不会出现的 孩子们 根对象的列表,所以的输出 findobj 是空的。
你可以找到更多的信息 HandleVisibility 在这个文档页面: 防止数据访问和轴
是有点奇怪,我是工作你第一次按下按钮,但没有工作你第二次按下按钮。我不太确定这是为什么发生,但我怀疑这与调用 情节 重置。
无论如何,解决办法很简单: 总是从你的向导代码调用函数时传递对象
有几种方法可以这样做:
选项1 :通过轴处理 testPlotScript
这个选项需要更新 testPlotScript 接受一个输入参数。例如:
函数testAxisView testPlotScript(处理)
情节(testAxisView handles.testData。x, handles.testData.y);
结束
现在当你打电话 testPlotScript ,一定要通过在两个输入参数:
handles.axes1 testPlotScript(处理)
选项2 :仅仅通过 处理 结构 testPlotScript 。例如:
函数testPlotScript(处理)
情节(处理。axes1 handles.testData。x, handles.testData.y);
结束
现在当你打电话 testPlotScript ,一定要通过的 处理 结构:
testPlotScript(处理)
选项3 :通过数字处理 testPlotScript 并通过数字处理 findobj 。例如:
函数testPlotScript(处理、图)
testAxisView = findobj(图,“类型”,“轴”,“标签”,“axes1”)
情节(testAxisView handles.testData。x, handles.testData.y);
结束
现在当你打电话 testPlotScript ,一定要通过在两个输入参数:
handles.figure1 testPlotScript(处理)

答案(1)

本杰明·克劳斯
本杰明·克劳斯 2018年7月26日
我难以运行的例子。我认为你是缺少一些碎片,包括文件 ScriptCalledByCallbackTest.m
无论如何,一些高级的图形命令,包括 情节 ,叫 newplot 图和轴策划准备。这个命令检查 NextPlot 属性图和轴来确定是否(a)删除轴并创建一个新的,(b)重置轴,(c)或添加到现有的轴。
我怀疑发生了什么 NextPlot 被设置为 取代 replacechildren 这意味着调用吗 情节 将删除现有的轴。
这个加到你的 testPlotScript 检查的价值 NextPlot :
testAxisView = findobj (“类型”,“轴”,“标签”,“axes1”)
disp (testAxisView.NextPlot)
f =祖先(testAxisView“图”);
disp (f.NextPlot)
情节(testAxisView handles.testData。x, handles.testData.y);
让我们知道的价值 NextPlot 在图和轴。我怀疑这是导致你看到的问题。
如果不是,尝试更新附件,以确保所有必要的文件都包括在内。 DAA_Cert_SensorModelTest.m 看起来就像一个向导生成的文件,但是我没有看到相应的 .fig 文件,我不明白 ScriptCalledByCallbackTest.m 相匹配 ScriptCalledByCallbackTest.fig 。注意:你不能重命名图或M文件生成的指导不打破两者之间的关系。如果你想要重命名的文件,你需要打开向导,选择“另存为”。
1评论
Stephen23
Stephen23 2018年7月27日
加里·舍温 “答案”搬到这里 (格式):
本杰明:
与你的建议我更换我的代码更改。这是我的输出。
我还包括正确的m文件
我遇到了你提到的文件重命名问题。我能通过这个工作。棘手的部分是进入.fig属性和改变名字。
谢谢你!
ScriptCalledByCallbackTest
testAxisView =
轴(axes1)属性:
XLim (0 - 1):
YLim (0 - 1):
XScale:“线性”
YScale:“线性”
GridLineStyle:“- - -”
位置(55.1429 - 8.2452 39.1429 - 17.7500):
单位:“角色”
显示所有属性
取代
f =
图(图1)属性:
数量:[]
名称:“ScriptCalledByCallbackTest”
颜色(0.9400 0.9400 0.9400):
位置(135.8571 - 37.5625 112 32.3125):
单位:“角色”
显示所有属性
添加
testAxisView =
0×0空GraphicsPlaceholder数组。
没有适当的方法、财产或字段“NextPlot”类“matlab.graphics.GraphicsPlaceholder”。
错误在testPlotScript(第2行)
disp (testAxisView.NextPlot)
错误在ScriptCalledByCallbackTest > pushbutton3_Callback(第100行)
testPlotScript ();
错误在gui_mainfcn(第95行)
函数宏指令(变长度输入宗量{:});
错误在ScriptCalledByCallbackTest(43行)
gui_mainfcn (gui_State变长度输入宗量{:});
错误
matlab.graphics.internal.figfile.FigFile /阅读> @ (hObject, eventdata) ScriptCalledByCallbackTest (“pushbutton3_Callback”hObject eventdata, guidata (hObject))
错误而评估UIControl回调。

登录置评。

类别

找到更多的在指定目标图形输出帮助中心文件交换

标签

下载188bet金宝搏


释放

R2018a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!