小编Jen*_*sen的帖子

文本"范围"属性不包含正确的大小

我想在GUI中放置一些文本,我想知道uicontrol类型的确切大小'text'!

我发现有几个线程解释说这可以使用包含相同文本'Extent''text'对象的属性来完成,参见示例:

function form = tempfunc(txt,font,fontsize)
    if nargin <3
        fontsize = 10;
    end
    if nargin < 2
        font = 'courier';
    end
    f = figure('Visible','off','Units','pixels');
    u = uicontrol(f,'Style','text','Units','pixels','String',txt,'FontName',font,'FontSize',fontsize);
    textsize = get(u,'Extent');
    textsize = textsize(3:4);
    close(f);

    form = figure('Units','pixels');
    uicontrol(form,'Style','text','Units','pixels','String',txt,'FontName',font,'FontSize',fontsize,'Position',[5,5,textsize]);
end
Run Code Online (Sandbox Code Playgroud)

我现在的问题是,这不起作用.当我运行上面的内容时,tempfunc(repmat('A',14));我得到下面的图窗口:

在此输入图像描述

从图像中可以看出,textsize变量中提取的文本的高度太小了!

请注意,这是我在运行Matlab R2014a的Windows计算机上运行程序时得到的结果.我后来在运行Matlab R2013b的Linux机器上运行完全相同的代码,在那台机器上我得到了我想要的结果.

我正在制作的GUI应该(希望)能够在任何计算机上运行,​​但是现在我真的不知道如何继续制作适用于任何机器的版本,所以请帮助我!

编辑: 我试图在运行Matlab R2011b(而不是我的R2014a)的另一台Windows 7机器(这次是Ultimate版本而不是我的企业版)上运行相同的代码,它仍然产生错误的文本框高度 - 但这一次文字框太高 - 见图片:

在此输入图像描述

编辑2: 我终于安装了R2014b,但遗憾的是它没有帮助!我看到了类似的图片:

在此输入图像描述

我还试图看看我的屏幕分辨率的不同选择是否有所不同 - 他们没有.

EDIT3:

我注意到不同的字体在高度上产生不同的错误,例如默认字体(MS Sans Serif)产生的文本框太高(并且随着更多行的添加,这个高度错误也会增加) - 在Linux上然而我得到了我尝试的所有字体的正确结果.

但我真正感兴趣的是使用快递字体的情况,因为我需要一个等宽字体用于我的目的.

windows matlab user-interface matlab-figure matlab-java

6
推荐指数
1
解决办法
608
查看次数

我可以制作自定义的matlab代码分析器警告吗?

关于如何纠正错误和低效率的matlab代码分析器有很多很好的建议,但我有时会遇到我想被分析器捕获的情况.具体来说,我正在考虑如下代码:

if numel(list > x)
  ...
end
Run Code Online (Sandbox Code Playgroud)

我无法想到我需要使用上述代码的任何情况,而以下代码:

if numel(list) > x
  ...
end
Run Code Online (Sandbox Code Playgroud)

经常使用.

我查看了代码分析器可能警告我的可能事项列表,但我没有发现这种可能性.

所以我的问题是:是否可以将自己的警告添加到代码分析器中,如果可以,如何添加?

我意识到,如果可能这可能是一项艰巨的任务,那么对于特定问题的任何替代方案或解决方案建议也将受到赞赏!

matlab code-analysis

6
推荐指数
1
解决办法
95
查看次数

是否可以更改保持工作空间的匿名功能?

我希望能够以编程方式更改匿名函数,例如通过将所有加号更改为函数中的乘法符号.在许多情况下,此示例可以按如下方式完成:

function f2 = changefunction(f1)
    fs = func2str(f1);
    fs(fs=='+') = '*';
    f2 = str2func(fs);
end
Run Code Online (Sandbox Code Playgroud)

但请考虑这个例子

f = @(x) x+5;
a = 5;
g = @(x) x+a;
Run Code Online (Sandbox Code Playgroud)

双方fg会匿名函数,增加了5,无论你塞了进去; 但是只有功能f才能正确更改changefunction,而g将被更改为任何输入都会出错的功能.

所以我的问题是是否可以从函数句柄中提取工作区并将其保留在创建的新函数句柄中?我需要以编程方式进行,最好不使用内置函数functions!

matlab anonymous-function

3
推荐指数
1
解决办法
449
查看次数