关于按钮和Table的问题
mathematica吧
全部回复
仅看楼主
level 9
Hyp_Cos 楼主
做4×4个按钮,每按一次显示的数加一,代码就是
board = Table[0, {i, 4}, {j, 4}]; Dynamic[
Grid[{{Button[board[[1, 1]], ++board[[1, 1]], ImageSize -> {30, 30}],
Button[board[[1, 2]], ++board[[1, 2]], ImageSize -> {30, 30}],
Button[board[[1, 3]], ++board[[1, 3]], ImageSize -> {30, 30}],
Button[board[[1, 4]], ++board[[1, 4]],
ImageSize -> {30, 30}]}, {Button[board[[2, 1]], ++board[[2, 1]],
ImageSize -> {30, 30}],
Button[board[[2, 2]], ++board[[2, 2]], ImageSize -> {30, 30}],
Button[board[[2, 3]], ++board[[2, 3]], ImageSize -> {30, 30}],
Button[board[[2, 4]], ++board[[2, 4]],
ImageSize -> {30, 30}]}, {Button[board[[3, 1]], ++board[[3, 1]],
ImageSize -> {30, 30}],
Button[board[[3, 2]], ++board[[3, 2]], ImageSize -> {30, 30}],
Button[board[[3, 3]], ++board[[3, 3]], ImageSize -> {30, 30}],
Button[board[[3, 4]], ++board[[3, 4]],
ImageSize -> {30, 30}]}, {Button[board[[4, 1]], ++board[[4, 1]],
ImageSize -> {30, 30}],
Button[board[[4, 2]], ++board[[4, 2]], ImageSize -> {30, 30}],
Button[board[[4, 3]], ++board[[4, 3]], ImageSize -> {30, 30}],
Button[board[[4, 4]], ++board[[4, 4]], ImageSize -> {30, 30}]}}]]
运行很正常
但是代码打起来太繁琐。想简化一下,于是有了下面“天真”的想法:
board = Table[0, {i, 4}, {j, 4}]; Dynamic[
Grid[Table[
Button[board[[i, j]], ++board[[i, j]], ImageSize -> {30, 30}], {i,
4}, {j, 4}]]]
结果按钮按不动
而且在Table外面套Evaluate、Release、ReleaseHold都没用
2015年05月06日 12点05分 1
level 9
Hyp_Cos 楼主
好吧,在Button外面套一个With[{i=i,j=j},就解决了
2015年05月06日 14点05分 2
吧务
level 15
用 With 是 Button 的文档里提了的办法。其实这里只要“显化”第二个参数里的 i 和 j 就行了:
board = Table[0, {i, 4}, {j, 4}]; Dynamic@
Grid[Table[Button[board[[i, j]], ++board[[##]], ImageSize -> {30, 30}] &[i, j], {i,
4}, {j, 4}]]
因为Button拥有的属性是HoldRest。一个与LZ的例子本质相同的简例:
Table[Hold@i, {i, 4}]
(* {Hold[i], Hold[i], Hold[i], Hold[i]} *)
2020年09月05日 07点09分 4
1