公告:本站正式转型为非交互式静态网站!
转型:本站将通过笔记和博客的形式继续为大家服务,关于 Mathematica 问答服务请移步至QQ群:365716997
联系:如有问题请联系QQ群管理员,或发送邮件至:lixuan.xyz@qq.com。
感谢:最后非常感谢大家多年来的支持与帮助!
参考《互联网跟帖评论服务管理规定》《中华人民共和国网络安全法》《网络信息内容生态治理规定》《互联网用户账号信息管理规定》

—— 2022-11-27

欢迎来到 Mathematica 问答社区

提问时请贴上文本代码

语法高亮:在编辑器中点击

被禁止的话题:广告破解

请阅读:《提问的智慧》

备用域名:mma.ooo

支持LaTex数学公式
行内公式标识符:\$ 或“$\backslash ($”+“$\backslash )$”,
行间公式标识符:\$\$ 或 “$\backslash [$”+“$\backslash ]$”

社区建议QQ群:365716997

分类

0 投票
1.4k 浏览
Clear["Global`*"]
Manipulate[
 Grid[{
   Table[Graphics[{If[EvenQ[a[[i]]], Red, Black], 
      Rectangle[{0, i}]}], {i, 15}],
   Table[Button["p" <> ToString[i], ++a[[i]]], {i, 15}]
   }]
 , {n, 8, 15, 1}, Initialization :> {a = Table[0, {i, 15}]}, 
 SaveDefinitions -> True]

如果去掉Table,一个一个的是可以的,比如

Clear["Global`*"]
Manipulate[
 Grid[{
   Table[Graphics[{If[EvenQ[a[[i]]], Red, Black], 
      Rectangle[{0, i}]}], {i, 15}],
   {Button["p" <> ToString[1], ++a[[1]]]}
   }]
 , {n, 8, 15, 1}, Initialization :> {a = Table[0, {i, 15}]}, 
 SaveDefinitions -> True]

 

为啥呢?

用户: flumer (161 分)

3 个回答

+1 投票
 
已采纳

问题在于 Button 的第二个参数,(帮助中说“将 action 保持在未操作状态”),需要注意的是此处的i不是Table中的i。

一种解决方案如下(即,在生成Button后,再对其修改):

Clear["Global`*"]
Manipulate[
 Grid[{Table[
    Graphics[{If[EvenQ[a[[i]]], Red, Black], Rectangle[{0, i}]}], {i, 
     15}], Table[
    Button["p" <> ToString[i], ++a[[ii]]] /. ii -> i, {i, 15}]}], {n, 
  8, 15, 1}, Initialization :> {a = Table[0, {i, 15}]}, 
 SaveDefinitions -> True]

 

用户: 野鹤 (5.1k 分)
采纳于 用户:flumer
感谢,说到了问题的本质
+1 投票
Clear["Global`*"]
Manipulate[
 Grid[{Table[
    Graphics[{If[EvenQ[a[[i]]], Red, Black], Rectangle[{0, i}]}], {i, 
     15}], Button["p" <> ToString[#], ++a[[#]]] & /@ Range[15]}], 
 Initialization :> {a = Table[0, {i, 15}]}, SaveDefinitions -> True]

 

用户: amita (481 分)
0 投票

不用Button,不过效果近似

Row@Table[
DynamicModule[{c=1},
EventHandler[
Graphics[{Dynamic@If[c==1,Red,Black],Rectangle[]},ImageSize->Tiny,PlotLabel->i],
"MouseClicked":>(c=1-c)]],{i,15}]

 

用户: chy (91 分)
谢谢!这得好好学学!
...