在MATLAB中,有一个提示用户选择一个或多个文件uigetfile的功能- 还有另一个允许用户选择文件夹的功能 - uigetdir.
我想向用户提供选择的能力或者一个文件或文件夹,使用单一窗口,因为这是对UX我试图创造重要.
到目前为止,我发现使用上述功能1的唯一解决方案需要额外的步骤,要求用户提前选择他们想要选择的实体类型,并相应地调用相应的功能 - 我觉得不方便.
那我怎么能有一个允许我选择其中一个的对话框呢?
matlab user-interface user-experience filechooser matlab-gui
我在Matlab工作,我有一个尺寸为384x512x160的3d矩阵,由384x512切片组成.
我该如何绘制这样的数据?
我想在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上然而我得到了我尝试的所有字体的正确结果.
但我真正感兴趣的是使用快递字体的情况,因为我需要一个等宽字体用于我的目的.
我有一个函数句柄,可以在任意大小的2d数组上运行:
R2T = @(DL1,DL2) arrayfun(@(DL1,DL2)...
1/(fzero(@(x)fFitObj1(x)./fFitObj2(x)-...
DL1./DL2,[minLim maxLim])) ...
,DL1,DL2) - C1;
Run Code Online (Sandbox Code Playgroud)
这是一个自下而上的细分:
fzero(@(x)fFitObj1(x)./fFitObj2(x)-DL1./DL2,[minLim maxLim])- 该位在间隔上查找所考虑函数的零[minLim maxLim],其中fFitObj1和fFitObj2是之前可用的函数句柄,C1是一些已知的常量并且DL1, DL2被提供.@(DL1,DL2)1/(fzero(...))- fzero允许DL1和DL2从外部提供的包装.arrayfun(@(DL1,DL2)...,DL1,DL2)- 另一个包装器,允许fzero在DL1, DL2作为矩阵提供时逐个元素地正确操作.R2T = @(DL1,DL2) arrayfun(...) - C1;- 另一个允许DL1, DL2从外部提供的包装器.我的问题是有时矩阵DL1, DL2可能包含NaN值,在这种情况下fzero返回以下错误:
Error using fzero (line 242)
Function values at interval endpoints must be finite and real.
Run Code Online (Sandbox Code Playgroud)
这就是为什么我自然想到了可用的 …
matlab anonymous-function lazy-evaluation short-circuiting logical-operators
我有一个有两条线和两个不同的x轴(不同的数据单元)的情节,我的情节如下所示.
我的问题是我想把盒子的顶部线条也画成黑色(水平),而不是像它那样"开放".如果线具有x轴刻度也是很好的,与底部水平轴线相同.
显然,grid on不起作用,因为它在右侧绘制y1轴刻度,在左侧绘制y2轴刻度,这是我不想要的.
另外,我认为在Matlab 2014中,这有效:set(ax(2),'XAxisLocation','top','XTickLabel',[]);但它在Matlab 2015a中已不复存在了.
这是一个例子:
figure(1);
x = [0, 1, 2, 3];
y_1 = [3, 2, 1.5, 1];
y_2 = [0, 0.5, 0.7, 0.9];
parula_blue = [0, 0.447, 0.741]; parula_red = [0.85, 0.325, 0.098];
[ax, h1, h2] = plotyy(x, y_1, x, y_2);
set(get(ax(1),'Ylabel'),'String','Data 1', 'Color', 'k');
set(h1,'LineWidth',2,'LineStyle','-','Color',parula_blue,'DisplayName', 'Name 1');
set(ax(1),'ycolor',parula_blue);
set(ax(1), 'YTick', [0 1 2 3 4]);
set(ax(1), 'ylim', [0 4]);
set(get(ax(2),'Ylabel'),'String','Data 2', 'Color', 'k');
set(h2,'LineWidth',2,'LineStyle','--','Color',parula_red,'DisplayName','Name 2');
set(ax(2),'ycolor',parula_red);
set(ax(2),'YDir','reverse');
set(ax(2), 'YTick', [0 0.2 …Run Code Online (Sandbox Code Playgroud) 许多在MATLAB(以及其他语言,有一个C衍生的功能scanf/ printf)用于写入或读取字符串(仅举几例:sscanf,sprintf,textscan)依靠用户提供有效的formatSpec,它告诉函数的结构字符串string-to-build或string-to-parse.我正在寻找一种方法来验证这样一个formatSpec字符串,然后在调用中sprintf使用它.
在这种情况下sprintf,文档中formatSpec描述的结构如下:
具体来说,我想指出两个方面formatSpec:
- (✓)格式化运算符以百分号开头
%,以转换字符结束.- (x)
formatSpec还可以在百分号之前%,或在转换字符之后包含其他文本.
我正在考虑的解决方案涉及使用正则表达式来测试传入的字符串.到目前为止我所拥有的是一个似乎能够匹配初始字符%和转换字符之间的所有内容的表达式,而不是可能出现的"附加文本".
(%{1}(\d+\$)?[-+\s0#]*(\d+|\*)?(\.\d+)?[bt]?[diuoxXfeEgGcs]+)+
Run Code Online (Sandbox Code Playgroud)
我想也增加了拍摄的能力."任何可打印文本字符之外%,'并且\,除非这些字符恰好出现两次".这需要%在转换字符之前和之后捕获.
[ -~]%,'和\:(?![\\%'])( §§§§ |'{2}|\\{2}|%{2})(§=占位符)我遇到了" 除非 " 的问题,即获得负面预测以丢弃单次出现但允许指定字符的双重出现.
最近在UndocumentedMatlab上发表的一篇文章提到App Designer图实际上是使用Dojo Toolkit的网页.这意味着我们理论上可以直接操作HTML DOM来实现某些不可用的UI自定义.
下面是App Designer图形定义的示例,如.mApp Designer生成的文件中所示(在MATLAB R2016a上):
classdef domDemo < matlab.apps.AppBase
% Properties that correspond to app components
properties (Access = public)
UIFigure matlab.ui.Figure % UI Figure
LabelListBox matlab.ui.control.Label % List Box
ListBox matlab.ui.control.ListBox % Item 1, Item 2, Item 3, It...
end
methods (Access = private)
% Code that executes after component creation
function startupFcn(app)
end
end
% App initialization and construction
methods (Access = private) …Run Code Online (Sandbox Code Playgroud) matlab dojo customization undocumented-behavior matlab-app-designer
在MATLAB中,类的一个属性(后面定义classdef)是Sealed,这意味着没有类可以将它用作超类(或者更确切地说," 表示这些类没有被设计为支持子类. " 1).
例如,如果我尝试实例化一个定义如下的类(考虑table是Sealed):
classdef SomeLie < table
end
Run Code Online (Sandbox Code Playgroud)
我会得到'MATLAB:class:sealed'错误:
>> A = SomeLie;
Error using SomeLie
Class 'table' is Sealed and may not be used as a superclass.
Run Code Online (Sandbox Code Playgroud)
由于我拒绝由机器来告诉我可能或可能不会做,我想继承一个Sealed类,而不管.我怎样才能在MATLAB R2017a中做到这一点?
我很难相信这个系统是完全不透气的,所以我正在寻找一种能够导致该Sealed属性被忽略的解决方案(或类似的东西).所需的解决方案应该无需修改任何"库类定义"即可从中删除Sealed.
我试着玩"反思",但到了死胡同......
classdef SomeLie % < table
properties (Access = private)
innerTable table;
end
properties (GetAccess = public)
methodHandles struct = struct();
end …Run Code Online (Sandbox Code Playgroud) vec = randi(10,10,1)
vec(vec < 5) = 0
func = @(x) x(x < 5) = 0 % This isn't valid
Run Code Online (Sandbox Code Playgroud)
我该如何将第二行代码转换为可以与之结合使用的函数句柄cellfun?
matlab anonymous-function function-handle cell-array elementwise-operations
TA-Lib Windows 发行版来自此处https://www.lfd.uci.edu/~gohlke/pythonlibs/#ta-lib,但仅支持到 3.10。如何在Windows中使用python 3.11安装Ta-lib?
下载ta-lib-0.4.0-msvc.zip并解压到
C:\ta-lib.这是一个 32 位二进制版本。如果您想使用 64 位 Python,则需要构建 64 位版本的库。在 64 位 Windows 10 上构建的一些非官方(且不受支持)说明,此处供参考:
- 下载并解压
ta-lib-0.4.0-msvc.zip- 将解压后的文件夹移动
ta-lib到C:\- 下载并安装 Visual Studio Community(2015 或更高版本)
- 记得选择
[Visual C++]功能- 构建 TA-Lib 库
- 从 Windows 开始菜单,开始
[VS2015 x64 Native Tools Command Prompt]- 移动
to C:\ta-lib\c\make\cdr\win32\msvc- 建立图书馆
nmake
但是之后:
ERROR: Failed building wheel for TA-Lib
Failed to build TA-Lib
ERROR: Could not build wheels for TA-Lib, which …Run Code Online (Sandbox Code Playgroud) matlab ×9
3d ×1
cell-array ×1
dojo ×1
filechooser ×1
inheritance ×1
matlab-gui ×1
matlab-hg2 ×1
matlab-java ×1
oop ×1
plot ×1
printf ×1
python ×1
python-3.11 ×1
regex ×1
sealed ×1
string ×1
ta-lib ×1
validation ×1
windows ×1