awlfa 发表于 2007-4-20 18:11

打开窗口选择框问题

我要做个matlab 的界面,要求有“打开”菜单,点击后就想默认菜单的“打开”项一样,会弹出一个窗口,改窗口可以改变连接的地址。我所知道界面设计,不管是用编程还是用GUI工具箱,都只能建立些控件,就是不能创建打开按钮,点击后会弹出一个对话框。请问高手要如何建立“打开”菜单或者“打开”按钮,点击后会弹出一个可以转移连接地址的对话框??谢谢

补充:即是但点击”打开“菜单或者”打开“按钮时,就会弹出像下面附件里面的窗口。谢谢

[ 本帖最后由 eight 于 2007-4-20 18:40 编辑 ]

eight 发表于 2007-4-20 18:40

原帖由 awlfa 于 2007-4-20 18:11 发表 http://forum.vibunion.com/forum/images/common/back.gif
我要做个matlab 的界面,要求有“打开”菜单,点击后就想默认菜单的“打开”项一样,会弹出一个窗口,改窗口可以改变连接的地址。我所知道界面设计,不管是用编程还是用GUI工具箱,都只能建立些控件,就是不能创 ...


help uigetfile

awlfa 发表于 2007-4-21 19:46

如何从打开窗口读取文件?

打开一个窗口后,想读取一个文件,结果老是错误。程序和错误提示信息如下,还请高手指点:

= uigetfile('*.wav','m file');
ifFILTERINDEX==1
      =wavread('FILENAME');
      P=fft(imp,32),
end

错误信息:
??? Error using ==> wavread
Cannot open file.
Error in ==> D:\常用应用程序\matlab\work\Untitled2.m
On line 4==>       =wavread('FILENAME');

我查看内存,发现FILENAME是一个20字节的变量,后来我直接复制到上面的程序中的=wavread('FILENAME');替代FILENAME变量,结果在调试器中就变成:
= uigetfile('*.wav','m file');
ifFILTERINDEX==1
      =wavread('aiwalr.wav
');
      P=fft(imp,32),
end
即:
=wavread('aiwalr.wav
');
    变成了2行,结果又出现错误信息:
???       =wavread('aiwalr.wav
                                 |
Error: Expected a variable, function, or constant, found "incomplete string".

后来,我又编了一下,变成:
= uigetfile('*.wav','m file');
ifFILTERINDEX==1
   =wavread('aiwalr.wav');
   P=fft(imp,32),
end

这样在调试器中就可以运行了。但是写成m文件时就运行不了,请问高手这是怎么回事?

对了,aiwalr.wav 是一个频率为48kHz ,有65536个取样点的声音文件,由于格式不匹配,上传不了。

eight 发表于 2007-4-21 21:45

=wavread('FILENAME');

改为:
=wavread(FILENAME);

[ 本帖最后由 eight 于 2007-4-21 23:16 编辑 ]

awlfa 发表于 2007-4-23 22:00

太爽了,eight

awlfa 发表于 2007-4-24 20:57

回复 #4 eight 的帖子

我编了点程序,运行老是出错,不知道怎么回事。调试器提示在调用callback时出错,但是我又找不出,还望高手指点。程序如下:
fid=figure('menubar','none');
hread=uimenu(fid,'label','&read');
hsingle=uimenu(hread,'label','single read');
htwo=uimenu(hread,'label','two read','callback',[' = uigetfile(''*.wav'');'...
   'ifFILTERINDEX==1=wavread(FILENAME);P=fft(imp,65536),end',...
    'p11=P(:,1);','p22=P(:,2);'...
    'for i=1:16:65536p1(i/16+15/16)=p11(i); p2(i/16+15/16)=p22(i); end ','H12=p2./p1;',...
   'r1=(H12-HI)./(HR-H12).*exp(2*j*k*x1);','=max(r1),','r=r1/(abs(r1(n)+1));',...
    'a=1-abs(r).^2;','Zs=[(1+r)/(1-r)]*1.19*c0;']);
   
hplot=uimenu(fid,'label','&plot');
hr=uimenu(hplot,'label','plot |r|-f','callback','fid=plot(f,abs(r)),');
hphase=uimenu(hplot,'label','plot \chi-f','callback','hmani=plot(f,-j*log(r./abs(r)));')
x1=1.5;
s=0.5;
f=;
c0=345;
d=0.2;
k2=0.0194*sqrt(f)/(c0*d);
k1=2*pi*f/c0;
k=k1-j*k2;
HI=exp(-j*k*s);
HR=exp(j*k*s);

错误信息:
??? Error: Missing operator, comma, or semicolon.

??? Error while evaluating uimenu Callback.




我截断了一些,发现:
加了下面这段就出问题:
'H12=p2./p1;',...
   'r1=(H12-HI)./(HR-H12).*exp(2*j*k*x1);','=max(r1),','r=r1/(abs(r1(n)+1));',...
    'a=1-abs(r).^2;','Zs=[(1+r)/(1-r)]*1.19*c0;'

不加这段就是提示:
??? Error: "end" expected, "End of Input" found.

??? Error while evaluating uimenu Callback.

编程好难啊,老是出一点错就搞了半天。

awlfa 发表于 2007-4-24 20:58

回复 #6 awlfa 的帖子

对了,aiwalr.wav 是一个频率为48kHz ,有65536个取样点的声音文件,由于格式不匹配,上传不了。

eight 发表于 2007-4-24 21:03

原帖由 awlfa 于 2007-4-24 20:58 发表 http://forum.vibunion.com/forum/images/common/back.gif
对了,aiwalr.wav 是一个频率为48kHz ,有65536个取样点的声音文件,由于格式不匹配,上传不了。


你首先保证callback函数中的代码运行没有问题,然后再构建gui。没有数据文件,我无法看出出错原因。你可以试试修改后缀名上传

awlfa 发表于 2007-4-25 23:04

我后来截断调试,结果发现:截取callback前面一段就没问题:
fid=figure('menubar','none');
hread=uimenu(fid,'label','&read');
hsingle=uimenu(hread,'label','single read');
htwo=uimenu(hread,'label','two read','callback',[' = uigetfile(''*.wav'');'...
    'ifFILTERINDEX==1=wavread(FILENAME); end ' ]);
   
hplot=uimenu(fid,'label','&plot');
hr=uimenu(hplot,'label','plot |r|-f','callback','fid=plot(f,abs(r)),');
hphase=uimenu(hplot,'label','plot \chi-f','callback','hmani=plot(f,-j*log(r./abs(r)));')
x1=1.5;
s=0.5;
f=;
c0=345;
d=0.2;
k2=0.0194*sqrt(f)/(c0*d);
k1=2*pi*f/c0;
k=k1-j*k2;
HI=exp(-j*k*s);
HR=exp(j*k*s);

但是一旦把callback后面段加上时就出现问题了。并且如果只有截取上面的程序后,把余下的未加上的程序直接复制到调试器中运行就没问题,感觉很奇怪。由于附件大于200kb,无法上传。压缩后改拓展名又无效。还望高手帮忙。谢谢
页: [1]
查看完整版本: 打开窗口选择框问题