声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2311|回复: 8

[GUI界面] 打开窗口选择框问题

[复制链接]
发表于 2007-4-20 18:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

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

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

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

窗口格式

窗口格式
回复
分享到:

使用道具 举报

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



help uigetfile
 楼主| 发表于 2007-4-21 19:46 | 显示全部楼层

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

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

[FILENAME, PATHNAME, FILTERINDEX] = uigetfile('*.wav','m file');
  if  FILTERINDEX==1
      [imp,Fs,bites]=wavread('FILENAME');
      P=fft(imp,32),
  end

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

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

后来,我又编了一下,变成:
[FILENAME, PATHNAME, FILTERINDEX] = uigetfile('*.wav','m file');
if  FILTERINDEX==1
   [imp,Fs,bites]=wavread('aiwalr.wav');
   P=fft(imp,32),
end

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

对了,aiwalr.wav 是一个频率为48kHz ,有65536个取样点的声音文件,由于格式不匹配,上传不了。
发表于 2007-4-21 21:45 | 显示全部楼层
[imp,Fs,bites]=wavread('FILENAME');


改为:

  1. [imp,Fs,bites]=wavread(FILENAME);
复制代码

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

评分

1

查看全部评分

 楼主| 发表于 2007-4-23 22:00 | 显示全部楼层
太爽了,eight
 楼主| 发表于 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',['[FILENAME, PATHNAME, FILTERINDEX] = uigetfile(''*.wav'');'...
     'if  FILTERINDEX==1  [imp,Fs,bites]=wavread(FILENAME);P=fft(imp,65536),end',...
    'p11=P(:,1);','p22=P(:,2);'...
    'for i=1:16:65536  p1(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,n]=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=[0:24000/4096:24000*4095/4096];
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,n]=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.

编程好难啊,老是出一点错就搞了半天。
 楼主| 发表于 2007-4-24 20:58 | 显示全部楼层

回复 #6 awlfa 的帖子

对了,aiwalr.wav 是一个频率为48kHz ,有65536个取样点的声音文件,由于格式不匹配,上传不了。
发表于 2007-4-24 21:03 | 显示全部楼层
原帖由 awlfa 于 2007-4-24 20:58 发表
对了,aiwalr.wav 是一个频率为48kHz ,有65536个取样点的声音文件,由于格式不匹配,上传不了。



你首先保证callback函数中的代码运行没有问题,然后再构建gui。没有数据文件,我无法看出出错原因。你可以试试修改后缀名上传
 楼主| 发表于 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',['[FILENAME, PATHNAME, FILTERINDEX] = uigetfile(''*.wav'');'...
    'if  FILTERINDEX==1  [imp,Fs,bites]=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=[0:24000/4096:24000*4095/4096];
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,无法上传。压缩后改拓展名又无效。还望高手帮忙。谢谢
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-12 23:31 , Processed in 0.218326 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表