[英]How to remove GUI element from Octave figure?
相对较新的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图形处理方式的人来说是显而易见的。 了解出了什么问题对我们来说是一个巨大的帮助。
您可以将其visible
属性设置为off
,而不是删除uicontrol
对象。 那样, uicontrol
仍然存在,你只是看不到它。
来自https://octave.org/doc/v4.2.0/Uicontrol-Properties.html :
visible
:“off
”| {“on
”}如果可见“
off
”,则uicontrol
不会在屏幕上呈现。
你的代码不完整,所以我不能评论一个特定的bug ...但是,这段代码适用于我(八度):
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
请注意,如果再次按下该按钮,则会出现错误。 所以问题可能不是删除标签本身,而是删除其他实际上不存在的东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.