如何隐藏编辑文本及长度?输入Root密码时光标不移动的技术问题
解决MATLAB中Root密码输入的隐藏与光标固定问题
首先,inputdlg函数本身不支持密码输入隐藏,也无法固定光标位置,你需要改用以下两种方案来实现需求:
方案一:自定义MATLAB密码对话框(固定光标+隐藏输入)
通过创建图形窗口和密码输入控件,设置隐藏字符并强制锁定光标位置:
function senha_root = getRootPassword() fig = figure('Visible','off','Position',[100 100 350 100],'Name','Para Alterar Permissões de Porta USB'); % 添加提示文本 uicontrol('Style','text','Position',[20 60 200 20],'String','Senha de Administrador:'); % 创建密码输入框,设置隐藏规则并锁定光标 passwordBox = uicontrol('Style','edit','Position',[220 60 100 20],... 'PasswordChar','*',... % 用*隐藏输入,设为''可完全不显示输入内容 'Enable','on',... 'Callback',@(~,~)set(passwordBox,'CursorPosition',1)); % 强制光标固定在首位 % 添加确认按钮 confirmBtn = uicontrol('Style','pushbutton','Position',[125 20 100 30],... 'String','Confirmar','Callback',@(~,~)close(fig)); % 显示窗口并等待关闭 set(fig,'Visible','on'); waitfor(fig); % 获取输入的密码 senha_root = get(passwordBox,'String'); end
调用该函数即可获得隐藏输入的密码,且光标不会随输入移动。
方案二:直接调用系统Shell的密码输入命令
如果最终是要在Shell中执行Root权限命令,可直接让MATLAB调用系统自带的密码输入工具,自动实现隐藏输入:
% Linux/macOS 环境下读取密码 [status, senha_root] = system('read -s -p "Senha de Administrador: " pass && echo $pass'); senha_root = strtrim(senha_root); % 去除多余换行符 % 示例:用获取的密码执行USB端口权限修改命令 system(['echo ', senha_root, ' | sudo -S chmod 777 /dev/ttyUSB0']);
这种方式下,终端会自动隐藏输入的密码,光标也不会发生移动(取决于终端实现,主流终端均支持)。
关于“文本颜色改背景色”方案的说明
inputdlg是MATLAB自带的系统级对话框,无法直接修改输入框的文本和背景色来隐藏输入,因此该方案不可行,必须改用上述自定义控件或系统命令的方式。
内容的提问来源于stack exchange,提问作者armando
相关产品推荐
相关产品推荐

