无法让 Matlab uicontrol 'text' 框定位在图形窗口的顶部
Posted
技术标签:
【中文标题】无法让 Matlab uicontrol \'text\' 框定位在图形窗口的顶部【英文标题】:can't get Matlab uicontrol 'text' box to position at top of figure window无法让 Matlab uicontrol 'text' 框定位在图形窗口的顶部 【发布时间】:2015-08-12 14:27:10 【问题描述】:我想在图形窗口的顶部显示我的“文本”,但起初窗口是空的,直到我向下拉伸它,窗口中间有我的文本。
'position' 属性是 [left bottom width height] “底”是什么意思?底部的像素?我想不通。
我已尝试调整“底部”,但无法在窗口顶部显示文本。
更新: 使用“位置”,[30 1 600 300] 现在在图形窗口中间显示文本,但我仍然想知道如何定位在窗口顶部。
figure('menu','none','toolbar','none', 'KeyPressFcn', @(src,evnt)parse_keypress(evnt,'press'), 'Name', 'COMMAND UI' );
txt = '';
txt = sprintf( '%s * COMMAND MENU * \n', txt );
txt = sprintf( '%s "B" breaks. \n', txt );
txt = sprintf( '%s "L" toggles Logitech_webcam_settings manual/auto\n', txt );
txt = sprintf( '%s "M" enables dynamic Disparity Map \n', txt );
txt = sprintf( '%s "Q" quits \n', txt );
txt = sprintf( '%s "P" pauses \n', txt );
txt = sprintf( '%s "S" show proximity pixles \n', txt );
txt = sprintf( '%s "V" shows 2nd video window \n', txt );
uicontrol('Style','text','Position',[30 1 180 600],'String',txt,...
'HorizontalAlignment','left');
【问题讨论】:
【参考方案1】:您需要指定文本相对于图形窗口大小的位置。默认图形大小为 560 像素宽 420 像素高。或者您可以通过以下方式获取:
hf = figure('menu','none',...
'toolbar','none',...
'KeyPressFcn', @(src,evnt)parse_keypress(evnt,'press'),...
'Name','COMMAND UI');
figPosition = get(hf,'Position'); % hf.Position also
返回(前两个值对您来说可能会有所不同,因为它们代表图形左下角相对于屏幕左下角的位置)
680 678 560 420
然后您可以使用它来指定文本的初始位置:
ht = uicontrol('Style','text',...
'Position',[30 1 180 figPosition(4)],...
'String',txt,...
'HorizontalAlignment','left');
当然,如果你调整窗口的高度,文本会随着它相对于左下角的位置移动...
【讨论】:
@excaza:是的。那将是一个很好的答案。尽管尚不清楚 OP 是否希望/需要能够调整图形大小(他们只是这样做是为了找到隐藏文本的位置)。【参考方案2】:您在调用图形时没有指定高度,因此创建了标准尺寸图形窗口,并且您的文本位置对于生成的图形大小来说太高了,因此它会将文本绘制为“超出范围”。
要么将文本的高度参数降低到类似
uicontrol('Style','text','Position',[40 1 180 400],'String',txt,...
'HorizontalAlignment','left');
或生成一个高度大于您的文本字段的图形
FigHandle = figure('menu','none','toolbar','none', 'KeyPressFcn', @(src,evnt)parse_keypress(evnt,'press'), 'Name', 'COMMAND UI' );
txt = '';
txt = sprintf( '%s * COMMAND MENU * \n', txt );
txt = sprintf( '%s "B" breaks. \n', txt );
txt = sprintf( '%s "L" toggles Logitech_webcam_settings manual/auto\n', txt );
txt = sprintf( '%s "M" enables dynamic Disparity Map \n', txt );
txt = sprintf( '%s "Q" quits \n', txt );
txt = sprintf( '%s "P" pauses \n', txt );
txt = sprintf( '%s "S" show proximity pixles \n', txt );
txt = sprintf( '%s "V" shows 2nd video window \n', txt );
set(FigHandle, 'Position', [100, 100, 500 600]);
uicontrol('Style','text','Position',[30 1 180 600],'String',txt,...
'HorizontalAlignment','left');
【讨论】:
以上是关于无法让 Matlab uicontrol 'text' 框定位在图形窗口的顶部的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法使用 TeX(希腊字母、下标、上标等)使 octave 解释 uicontrol 静态文本中的字符串?
Matlab uicontrol 列表框在关闭时返回而不是立即返回