Mathematica ItemSize禁用SetterBar

时间:2016-05-15 19:26:24

标签: dynamic formatting wolfram-mathematica spacing

我正在使用 Mathematica 并且ItemSize的{​​{1}}功能存在问题。在下面的代码中,我在第二个面板中根据第一个面板中的Multicolumn值生成一定数量的SetterBar s。这些以编程方式生成的SetterBar更新值为0,1和2的列表。对于Panel 1值2和4,有足够的空间。但是,Panel 1值8和16将SetterBar屏幕关闭。我尝试在SetterBar之后使用ItemSize -> {5, 1}来“压缩”Spacings -> 0。手动设置SetterBar功能时,只有第一个ItemSize允许我点击并更改其值。所有其他SetterBar似乎都被“禁用”了。

有人能告诉我如何将16 SetterBar的长列表“压缩”到一行中,而不需要水平滚动吗?

SetterBar

1 个答案:

答案 0 :(得分:0)

您必须将内部Multicolumn的列数修改为1,并且不应使用number将其增加。

DynamicModule[{number = 2, list = {0, 0}}, 
 Panel[Column[{Panel[
     SetterBar[
      Dynamic[number, {(number = #), (list = PadRight[{}, number])} &], {2, 4, 8, 16}]], 
    Dynamic[Panel[
      Multicolumn[
       Table[With[{i = i}, 
         Multicolumn[{SetterBar[Dynamic[list[[i]]], {0, 1, 2}], 
           Style[i, 12]}, {2, 1}, Alignment -> Center, 
          ItemSize -> {4, 1}]], {i, number}], number, 
       Spacings -> 0]]], Dynamic[list]}]]]

或者

DynamicModule[{number = 2, list = {0, 0}}, 
 Panel[Column[{Panel[
     SetterBar[
      Dynamic[number, {(number = #), (list = PadRight[{}, number])} &], {2, 4, 8, 16}]], 
    Dynamic[Panel[
      Multicolumn[
       Table[With[{i = i}, 
         Multicolumn[{SetterBar[Dynamic[list[[i]]], {0, 1, 2}], 
           Style[i, 12]}, 1, Alignment -> Center, 
          ItemSize -> {4, 1}]], {i, number}], number, 
       Spacings -> 0]]], Dynamic[list]}]]]

两者都产生 Out1

您也可以使用RowColumn代替Multicolumn

DynamicModule[{number = 2, list = {0, 0}}, 
 Panel[Column[{Panel[
     SetterBar[
      Dynamic[number, {(number = #), (list = PadRight[{}, number])} &], {2, 4, 8, 16}]], 
    Dynamic[Panel[
      Row[Table[
        With[{i = i}, 
         Column[{SetterBar[Dynamic[list[[i]]], {0, 1, 2}], 
           Style[i, 12]}, {2, number}, Alignment -> Center, 
          ItemSize -> {4, 1}]], {i, number}]]]], Dynamic[list]}]]]

Out2