用户更新后从 Matlab 编辑 uicontrol 中删除光标?

Posted

技术标签:

【中文标题】用户更新后从 Matlab 编辑 uicontrol 中删除光标?【英文标题】:Removing cursor from Matlab edit uicontrol after user has updated it? 【发布时间】:2021-10-17 11:22:14 【问题描述】:

向所有 Matlab 向导致敬 --

如果这是一个微不足道的问题,我深表歉意。在用户按下“enter”(并调用回调)后,如何从编辑 uicontrol 框中删除闪烁的光标?我认为默认情况下按“enter”会删除光标,因为用户已经“完成”了输入,但没有。我以为“selected”是属性,但不,那是不同的。

我无法通过谷歌搜索找到这个(后者大部分时间都有效)。

干杯!

【问题讨论】:

把焦点移到别的地方,也许是下一个uicontrol。 谢谢你,斯塔克。似乎这只会将问题转移到另一个uicontrol。我不希望将焦点放在任何 uicontrol 上,而是将焦点放在“焦点”中的图形(与顶部不同)——即处于无花果再次接受 ButtonDnFcn 回调的状态,无需单击在它的任何地方。 【参考方案1】:

您可以使用dummy uicontrol 来复制(我认为)您所追求的行为,请参阅此示例代码,它可以为您提供所需的行为

% create a figure
f = figure;
% set keypress and button down callbacks
f.KeyPressFcn = @(a,b)disp('press on figure' );
f.ButtonDownFcn = @(a,b)disp('button on figure' );
% create a dummy uicontrol as a text object with no text
t = uicontrol ( f, 'style' , 'text' );
% create a edit control
% set the callback to move the foccus to the dummy uicontrol
e = uicontrol ( f, 'style', 'edit', 'Callback', @(a,b)uicontrol(t) );
% set the key press and the button down callbacks of the dummy figure
% to run the callbacks of the figure
t.KeyPressFcn= @(obj,evt)feval(f.KeyPressFcn);
t.ButtonDownFcn= @(obj,evt)feval(f.ButtonDownFcn);

现在,当您在编辑框中输入文本并按下回车键时,焦点将移动到新的 uicontrol,其中回调链接到图形回调

【讨论】:

【参考方案2】:

这是我的问题的解决方案(灵感来自 https://uk.mathworks.com/matlabcentral/answers/65223-deselect-uimenus-after-click-in-gui)

%callback function for the control
function update_control (hdl,event)
            set(hdl, 'Enable', 'off');
            drawnow;
            set(hdl, 'Enable', 'on');
set(gcf,'CurrentObject',default_object);

这会移除闪烁的光标并将 GUI 交互性返回到用户正在与之交互的上一个对象。

【讨论】:

以上是关于用户更新后从 Matlab 编辑 uicontrol 中删除光标?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 在更新后从 Web 服务重新加载数据

如何在更新 conda 后从终端提示符中删除(基础)

Vue.js 硬刷新后从输入中重置状态值。如何解决?

2015 年 3 月更新后从 Spotify 应用获取当前曲目信息

MySQL TRIGGER:从表 1 中删除后从表 2 中删除或更新

从 JavaScript 渲染 Blazor 组件 - 如何在组件渲染后从 JavaScript 更新 Blazor 组件参数