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数组。
我怎么解决这个问题呢?
0评论
接受的答案
本杰明·克劳斯
2018年7月26日
当你打电话
findobj
,你不指定搜索所需的轴。因为你没有指定在哪里看,MATLAB中寻找“根对象”。有效,
findobj
是开始
大的
(根对象),并要求所有的孩子。然后检查所有的孩子是否轴。然后检查孩子的孩子是否轴,等。然而,因为
HandleVisibility
图的设置
回调
,这个数字是不会出现的
孩子们
根对象的列表,所以的输出
findobj
是空的。
是有点奇怪,我是工作你第一次按下按钮,但没有工作你第二次按下按钮。我不太确定这是为什么发生,但我怀疑这与调用
情节
重置。
无论如何,解决办法很简单:
总是从你的向导代码调用函数时传递对象
。
有几种方法可以这样做:
选项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
。
我怀疑发生了什么
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
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回调。