【问题标题】:Terminating while loop with a pushbutton Matlab用按钮 Matlab 终止 while 循环
【发布时间】:2015-04-10 02:33:15
【问题描述】:

我有一个 uitable 和一个函数,一旦用户单击相应的行,它就会返回项目的 id。 id 也是一个全局变量,因为它用于各种函数。 这个想法是我创建一个数组,其中包含用户从 uitable 中选择的所有项目,当单击保存播放列表时终止。前任。如果用户连续选择 id 为 5、7、9 的项目,然后单击“保存播放列表”按钮,我希望数组保持

5 7 9

我认为最好的方法是使用 while 循环。 while 循环应该检查是否单击了保存按钮。我有一个全局变量,一旦程序进入“保存播放列表”按钮回调函数就会改变。

问题在于,一旦用户选择了一个 ID,数组就会继续迭代,直到用户选择另一个 ID,并且会继续迭代等等,直到单击保存按钮。例如:用户点击 ID 5,数组将记录 55555555555555... 重复出现,直到用户点击 ex。 ID 7:555555555555557777777777,因为程序不断循环和循环而没有暂停。

代码如下:

 while (keeprunning)
     idvec = [idvec id];
 end

keeprunning 是一个全局变量,在开启函数中初始化为 1。在“保存播放列表”回调函数中改为0。

我想通过引入一个名为“itemselected”的新全局变量来解决此问题,该变量在打开函数中初始化为 1,并在每次调用单元格选择回调时再次更改为 1。在 while 循环中将 ID 添加到数组后,此变量将重置为 0。

这个想法是循环应该在没有点击“保存播放列表”按钮时进行迭代(由 keeprunning 全局变量控制)但是程序不应该让 while 循环迭代,直到用户点击另一行,即直到单元格再次调用选择回调函数。

我需要这样的东西,但这不起作用(无限循环)。还是有其他建议??

 while (keeprunning || trackselected)
    idvec = [idvec id];
    trackselected = 0;
 end

提前谢谢你

【问题讨论】:

    标签: matlab loops while-loop callback infinite


    【解决方案1】:

    要记录用户在 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
    

    然后,当您点击“播放列表”按钮时,只需读取父图形句柄中的 userdata 字段。

    【讨论】:

    • 我发现很难理解您的代码中发生了什么。首先我的 GUI 是在 Guide 中完成的,也许这就是原因。这可以在指南创建的 GUI 中实现吗?
    【解决方案2】:

    在停止思考并做其他事情后,我解决了这个问题;令人着迷的是,我发现它是一种非常简单的方法。

    我所做的是在 CellSelectionCallback 中创建一个全局数组。程序通过在“创建播放列表”按钮回调中使用布尔变量来检查程序是否已启动以创建播放列表,在这种情况下,全局数组附加了所选行的项目 ID。由于数组是全局的,它可以用于不同的函数。单击“保存播放列表”按钮后,数组将被刷新。

    就这么简单,然而,有时简单并不那么简单,尤其是在看了大约 10 个小时的 matlab 代码之后。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多