具有多个小部件的 Matlab 图形中的小部件选择和鼠标事件处理
Widget selection and mouse event handling in a Matlab figure having several widgets
我正在尝试在包含多个小部件的 figure
中很好地处理事件。一方面,只有 figure
有一个 WindowScrollWheelFcn
(如果我现在专注于鼠标滚轮)。另一方面,当我创建一个包含两个列表的图形时,比如
h_fig = figure();
strs = arrayfun(@num2str, [1:100], 'UniformOutput', false);
uicontrol(h_fig, 'Style', 'list', 'Units', 'normalized', 'Position', [0.6 0 1 1], 'String', strs);
uicontrol(h_fig, 'Style', 'list', 'Units', 'normalized', 'Position', [0 0 0.4 1], 'String', strs);
鼠标滚轮事件仅由所选列表捕获和处理。此外,如预期的那样,选择一个列表会取消选择另一个列表。
现在我想在其中插入我自己的小部件,我希望我的自定义小部件能够完全按照这些列表进行处理。如何编写一个与上面示例中明显的小部件选择机制集成的小部件?也就是说,这可能会禁用其他小部件(自定义和内置的类似列表)以及被禁用。我想一旦这个就位,编写一个只在选定的小部件上运行的 WindowScrollWheelFcn
就很简单了。
我相当确定 list
样式 uicontrol
的滚动发生在 MATLAB 的事件处理框架之外,在 Java 级别。
不过,您可以使用 gco
从回调中检测当前选定的对象。如果选择了其中一个,这将正确 return 正在滚动的 uicontrol
,并且会对 axes
做同样的事情。您只需要注意如何处理子对象的选择,例如,如果选择了绘制在 axes
上的 line
,而您仍然希望滚轮事件影响那些 axes
。
我正在尝试在包含多个小部件的 figure
中很好地处理事件。一方面,只有 figure
有一个 WindowScrollWheelFcn
(如果我现在专注于鼠标滚轮)。另一方面,当我创建一个包含两个列表的图形时,比如
h_fig = figure();
strs = arrayfun(@num2str, [1:100], 'UniformOutput', false);
uicontrol(h_fig, 'Style', 'list', 'Units', 'normalized', 'Position', [0.6 0 1 1], 'String', strs);
uicontrol(h_fig, 'Style', 'list', 'Units', 'normalized', 'Position', [0 0 0.4 1], 'String', strs);
鼠标滚轮事件仅由所选列表捕获和处理。此外,如预期的那样,选择一个列表会取消选择另一个列表。
现在我想在其中插入我自己的小部件,我希望我的自定义小部件能够完全按照这些列表进行处理。如何编写一个与上面示例中明显的小部件选择机制集成的小部件?也就是说,这可能会禁用其他小部件(自定义和内置的类似列表)以及被禁用。我想一旦这个就位,编写一个只在选定的小部件上运行的 WindowScrollWheelFcn
就很简单了。
我相当确定 list
样式 uicontrol
的滚动发生在 MATLAB 的事件处理框架之外,在 Java 级别。
不过,您可以使用 gco
从回调中检测当前选定的对象。如果选择了其中一个,这将正确 return 正在滚动的 uicontrol
,并且会对 axes
做同样的事情。您只需要注意如何处理子对象的选择,例如,如果选择了绘制在 axes
上的 line
,而您仍然希望滚轮事件影响那些 axes
。