gpt4 book ai didi

matlab - uimenu 按钮保持按下状态,只需在其上滑动即可触发其他菜单 : pushbutton behaviour desired

转载 作者:太空宇宙 更新时间:2023-11-03 20:25:37 26 4
gpt4 key购买 nike

我在我的 uitable 中实现了各种 uimenu,但出现了一个非常烦人的行为。

function createUItable

h = figure
...

uimenu(h,'Label','MenuButton','Callback',@someAction)

end
%---------
function someAction(~,~)
%some action
end

但是在执行回调函数后,菜单按钮仍然被按下并突出显示,甚至没有,当我滑过下一个菜单按钮时,这个按钮也会被触发!

This behaviour was also described at Matlab Central, but without solution.

我尝试了建议:

function someAction(~,~)
%some action
set(gcbo,'Enable','off')
drawnow
set(gcbo,'Enable','on')
end

这不会改变任何东西。单独使用 set(gcbo,'Enable','off') 可以解决滑动问题,但也会禁用整个按钮,这是我不想要的。我还尝试使用 'Checked','Visible' and 'Interuptible' property没有成功。这个问题必须知道,有什么提示吗?

我也考虑过使用 uicontrol 而不是 uimenu 并使用按钮,但我没有让它工作。


编辑:当我将我的菜单按钮放入子菜单时,它工作得很好:

button = uimenu(h,'Label','MenuButton');
uimenu(button,'Label','MenuButton','Callback',@someAction)

编辑2:pushbutton 也可以,但我怎样才能将它放入菜单栏中呢?

最佳答案

我猜 MATLAB 实现是这样的,因为在顶级菜单设置回调很奇怪。自然地,在 GUI(不仅是 MATLAB)中,当您单击顶级菜单(如"file"、“编辑”等)时,标准行为是弹出子菜单而不是立即执行操作。所以你应该只使用顶级回调来例如动态创建/修改关联的子菜单。

我认为有两种选择:

1) 如果您想坚持这种方式(一个始终可见的类似按钮的元素),那么您应该通过 uipushtool 使用工具栏:

hToolbar = uitoolbar(parentFigure);
uipushtool(hToolbar, 'ClickedCallback', @someAction);

虽然这没有 'Label' 属性,因此您必须使用 'CData' 并且可能是 'TooltipString'.

2) 创建一个包含实际操作菜单的顶级菜单:

topMenu = uimenu(parent, 'Label', 'Actions');
uimenu(topMenu, 'Label', 'MenuButton', 'callback', @someAction)

从 GUI 设计的一般观点来看,这两种备选方案都具有成为更常用样式的优势,因此对任何用户而言都更加直观。

关于matlab - uimenu 按钮保持按下状态,只需在其上滑动即可触发其他菜单 : pushbutton behaviour desired,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19423348/

26 4 0