0

我是制作 GUI 的新手,这是我的第一次尝试,但我花了几天时间寻找一个非常基本的按钮问题的答案。这里有一个类似的问题,但它对我不起作用,因为我需要制作多个只需单击一下即可更改。

GUI 由一个表格组成,该表格列出了许多图像以及两个空白列(最终的 GUI 将有一个 1000,50 表格)。GUI 显示第一个图像,然后有 3 个按钮,按钮 1 和 2 将数据插入表中,然后显示下一个图像,更新代码中的 Row 变量,以便您可以在每个按钮按下时向下移动图像列表。按钮 3 不同,它从当前行获取数据并将其放置在单独的表中以用于拒绝数据,然后再次更新行变量。但是,我无法让我的回调函数更新 Row、Table 和 Rejected_Data 变量。我的代码如下:

%Simple GUI for to show issue
%Table
Table=cell(4,3);
Table(1,1:end)=[{'File'},{'Type'},{'Value'}];
Table(2,1)={'Image1.jpg'};
Table(3,1)={'Image2.jpg'};
Table(4,1)={'Image3.jpg'};
% Rejected Images
Rejected_Data=cell(4,3);
Rejected_Data(1,1:end)=[{'File'} {'Type'} {'Value'}];

% GUI bit

Row=2;
Im=imread(Table{Row,1});
%Figure
hFig=figure;
set(hFig,'Units','Normalized','Position',[0.1 0.1 0.6 0.6]);
%Axes
hAx=axes('Parent',hFig);
set(hAx,'Units','Normalized','Position',[0.2 0.4 0.5 0.5]);
Image=imagesc(Im,'Parent',hAx);
axis off;
%button1
bh1=uicontrol('Style','pushbutton','String','Button1');
set(bh1,'Units','Normalized','Position',[0.2 0.2 0.1 0.05]);
%button2
bh2=uicontrol('Style','pushbutton','String','Button2');
set(bh2,'Units','Normalized','Position',[0.4 0.2 0.1 0.05]);
%button3
bh3=uicontrol('Style','pushbutton','String','Scrap');
set(bh3,'Units','Normalized','Position',[0.6 0.2 0.1 0.05]);

% Callbacks
set(bh1,'Callback',{@buttontest1,Table,Row,hAx});
set(bh2,'Callback',{@buttontest2,Table,Row,hAx});
set(bh3,'Callback',{@buttontest3,Table,Row,hAx,Rejected_Data});

按钮 1 和 2 的功能是:

function buttontest1(~,~,Table,Row,hAx)
Table(Row,2)=cellstr('Tree');
Table(Row,3)=47;
Row1=Row+1;
evalin('base','Row = Row1');
evalin('base','Table = Table');
Pic=imread(Table{Row1,1});
imagesc(Pic,'Parent',hAx);
end

按钮 3 的功能:

function buttontest3(~,~,Table,Row,hAx,Rejected_Data)
Rejected_Data(Row,:)=Table(Row,:);
Row1=Row+1;
evalin('base','Row = Row1')
Pic=imread(Table{Row1,1});
imagesc(Pic,'Parent',hAx);
end

我尝试使用 global 而不是 evalin,但由于 Row 等已经存在它不起作用,我也尝试过 assignin,但我也无法让它工作。我不想使用指南,因为我需要只有一个文本文件的灵活性,我也不使用嵌套函数,因为它们也需要我的原始 GUI 也是一个函数,最终的 GUI 将我们固定到一些预先处理将创建输入的数据表。

任何帮助将不胜感激。谢谢

4

2 回答 2

1

用于guidata存储您的数据。evalin不推荐用于此目的。

于 2013-05-20T19:59:07.203 回答
0

使用句柄结构来处理 gui 中的数据传输。

于 2014-05-31T04:27:15.200 回答