用按钮 Matlab 终止 while 循环
Terminating while loop with a pushbutton Matlab
我有一个 uitable 和一个函数,当用户点击其各自的行时,returns 项目的 id。 id 也是一个全局变量,因为它用于各种函数。
这个想法是我创建一个数组,其中包含所有用户从 uitable 中选择的项目,在单击保存播放列表时终止。前任。如果用户连续选择 id 为 5、7、9 的项目然后单击 'save playlist' 按钮,我希望数组保持
5 7 9
我认为最好的方法是使用 while 循环。 while 循环应检查是否已单击保存按钮。我有一个全局变量,一旦程序进入 'save playlist' 按钮回调函数就会发生变化。
问题是,一旦用户选择了一个 ID,数组就会继续迭代,直到用户选择另一个 ID,并且会继续迭代等等,直到单击保存按钮。例如:用户点击 ID 5,数组将记录 55555555555555... 重复出现,直到用户点击 ex。 ID 7:555555555555557777777777,因为程序一直在循环,没有暂停。
代码如下所示:
while (keeprunning)
idvec = [idvec id];
end
keeprunning是一个全局变量,在开启函数中初始化为1。在'save playlist'回调函数中改为0。
我想通过引入一个名为 'itemselected' 的新全局变量来解决此问题,该变量在打开函数中初始化为 1,并在每次调用单元格选择回调时再次更改为 1。在 while 循环中将 ID 添加到数组后,此变量将重置为 0。
想法是当 'save playlist' 按钮未被点击时循环应该迭代(由 keeprunning 全局变量控制)但是程序不应该让 while 循环迭代直到用户点击另一行即直到再次调用小区选择回调函数。
我需要这样的东西,但这不起作用(无限循环)。或者其他一些建议??
while (keeprunning || trackselected)
idvec = [idvec id];
trackselected = 0;
end
提前致谢
要记录用户在 uitable 中选择字段的历史记录,请执行如下操作:
function tbl_example
% Create the figure
fh = figure('Visible', 'off')
ud.selected_list = [];
d = gallery('integerdata',100,[10 3],0);
t = uitable(fh,'Data',d,'ColumnWidth',{50}, 'cellselectioncallback', @cell_history );
set( fh, 'visible', 'on' );
set( fh, 'userdata', ud );
return
function cell_history( h, event_data )
fh = get( h, 'Parent' )
ud = get( fh, 'userdata' );
indx = event_data.Indices;
ud.selected_list = [ ud.selected_list h.Data( indx(1), indx(2) ) ]
set( fh, 'userdata', ud );
return
然后,当您点击 "playlist" 按钮时,只需读取父图形句柄中的用户数据字段。
在停止思考并做其他事情后,我解决了这个问题;令人着迷的是,它是一种非常简单的方法。
我所做的是在 CellSelectionCallback 中创建一个全局数组。该程序通过在 'create a playlist' 按钮回调中使用布尔变量来检查程序是否已启动以创建播放列表,在这种情况下,全局数组附加了所选行的项目 ID。由于数组是全局的,它可以用于不同的函数。单击 'save playlist' 按钮后刷新数组。
就这么简单,然而,有时简单并不是那么简单,尤其是在看了大约 10 个小时的 matlab 代码之后。
我有一个 uitable 和一个函数,当用户点击其各自的行时,returns 项目的 id。 id 也是一个全局变量,因为它用于各种函数。 这个想法是我创建一个数组,其中包含所有用户从 uitable 中选择的项目,在单击保存播放列表时终止。前任。如果用户连续选择 id 为 5、7、9 的项目然后单击 'save playlist' 按钮,我希望数组保持
5 7 9
我认为最好的方法是使用 while 循环。 while 循环应检查是否已单击保存按钮。我有一个全局变量,一旦程序进入 'save playlist' 按钮回调函数就会发生变化。
问题是,一旦用户选择了一个 ID,数组就会继续迭代,直到用户选择另一个 ID,并且会继续迭代等等,直到单击保存按钮。例如:用户点击 ID 5,数组将记录 55555555555555... 重复出现,直到用户点击 ex。 ID 7:555555555555557777777777,因为程序一直在循环,没有暂停。
代码如下所示:
while (keeprunning)
idvec = [idvec id];
end
keeprunning是一个全局变量,在开启函数中初始化为1。在'save playlist'回调函数中改为0。
我想通过引入一个名为 'itemselected' 的新全局变量来解决此问题,该变量在打开函数中初始化为 1,并在每次调用单元格选择回调时再次更改为 1。在 while 循环中将 ID 添加到数组后,此变量将重置为 0。
想法是当 'save playlist' 按钮未被点击时循环应该迭代(由 keeprunning 全局变量控制)但是程序不应该让 while 循环迭代直到用户点击另一行即直到再次调用小区选择回调函数。
我需要这样的东西,但这不起作用(无限循环)。或者其他一些建议??
while (keeprunning || trackselected)
idvec = [idvec id];
trackselected = 0;
end
提前致谢
要记录用户在 uitable 中选择字段的历史记录,请执行如下操作:
function tbl_example
% Create the figure
fh = figure('Visible', 'off')
ud.selected_list = [];
d = gallery('integerdata',100,[10 3],0);
t = uitable(fh,'Data',d,'ColumnWidth',{50}, 'cellselectioncallback', @cell_history );
set( fh, 'visible', 'on' );
set( fh, 'userdata', ud );
return
function cell_history( h, event_data )
fh = get( h, 'Parent' )
ud = get( fh, 'userdata' );
indx = event_data.Indices;
ud.selected_list = [ ud.selected_list h.Data( indx(1), indx(2) ) ]
set( fh, 'userdata', ud );
return
然后,当您点击 "playlist" 按钮时,只需读取父图形句柄中的用户数据字段。
在停止思考并做其他事情后,我解决了这个问题;令人着迷的是,它是一种非常简单的方法。
我所做的是在 CellSelectionCallback 中创建一个全局数组。该程序通过在 'create a playlist' 按钮回调中使用布尔变量来检查程序是否已启动以创建播放列表,在这种情况下,全局数组附加了所选行的项目 ID。由于数组是全局的,它可以用于不同的函数。单击 'save playlist' 按钮后刷新数组。
就这么简单,然而,有时简单并不是那么简单,尤其是在看了大约 10 个小时的 matlab 代码之后。