Octave相对较新,我正在创建一个简单的图形窗口,其中在轴对象中包含一个绘图,并且一些uicontrol对象可以操纵该绘图。到现在为止,一切都很简单,我制作了图形,轴和uicontrols
figure(1, 'position', ...
h.ax = axes(...
h.button = uicontrol('style', 'pushbutton', 'string', 'press me', 'callback', @func)
h.label = uicontrol(...
guidata(gcf, h)
问题来自我的按钮回调之一。当按下按钮时,不仅情节发生了变化,而且我还需要从gui中删除元素之一,例如uicontrol标签。我发现从图形窗口中获取gui元素的唯一方法是删除uicontrol对象,因此我的回调看起来像
function func (obj)
h = guidata(obj);
delete(h.label);
...
guidata(obj, h);
endfunction
这将产生“错误:guidata:H必须是图形回调函数中的有效对象句柄执行错误”。
我怀疑我的错误对于掌握了Octave / Matlab中图形处理方式的人来说是显而易见的。了解出了什么问题对您有很大的帮助。
答案 0 :(得分:0)
您可以将其@SuppressLint("RestrictedApi")
override fun setupDialog(d: Dialog?, style: Int) {
super.setupDialog(d, style)
dialogExampleBinding = DataBindingUtil
.inflate(LayoutInflater.from(context), R.layout.dialogExample, null, false) //This is for data binding only
d?.setContentView(R.layout.dialogExample)
val myDialog:BottomSheetDialog = d as BottomSheetDialog
val dField = myDialog.javaClass.getDeclaredField("behavior") //This is the correct name of the variable in the BottomSheetDialog class
dField.isAccessible = true
val behavior = dField.get(d) as BottomSheetBehavior<*>
behavior.setBottomSheetCallback(object : BottomSheetBehavior.BottomSheetCallback() {
override fun onStateChanged(bottomSheet: View, newState: Int) {
if (newState == BottomSheetBehavior.STATE_DRAGGING) {
behavior.state = BottomSheetBehavior.STATE_EXPANDED
}
}
override fun onSlide(bottomSheet: View, slideOffset: Float) {}
})
}
属性设置为uicontrol
,而不是删除visible
对象。这样,off
仍然存在,您看不到它。
来自https://octave.org/doc/v4.2.0/Uicontrol-Properties.html:
uicontrol
:“visible
” | {“off
}如果可见为“
on
”,则不会在屏幕上显示off
。
答案 1 :(得分:0)
您的代码不完整,因此我无法评论特定的错误……但是,此代码对我有用(以八度为单位):
function testo()
figure(1, 'position', [10, 10, 400, 400]);
h.ax = axes('position', [0,0,1,1]);
h.button = uicontrol('style', 'pushbutton', 'string', 'press me', 'position', [10, 50, 100, 50], 'callback', @func);
h.label1 = uicontrol('style', 'text', 'string', 'label1', 'position', [120, 50, 100, 50]);
h.label2 = uicontrol('style', 'text', 'string', 'label2', 'position', [230, 50, 100, 50]);
guidata(gcf, h)
endfunction
function func (obj,evnt)
h = guidata(obj);
delete(h.label1);
guidata(obj, h);
endfunction
请注意,如果再次按下按钮,则会看到错误。因此,也许问题不在于删除标签本身,而是删除实际上不存在的其他标签。