回答編集履歴

3

追記

2021/07/02 12:51

投稿

gottadiveintopy
gottadiveintopy

スコア736

test CHANGED
@@ -37,3 +37,45 @@
37
37
 
38
38
 
39
39
  具体的にどう違うんですか?`layout.children`と`appendで作ったボタンリスト`の中身の順番が逆だということならそれで正常です。
40
+
41
+
42
+
43
+ ### 追記:別のやり方
44
+
45
+
46
+
47
+ 現在のcodeではlambdaのdefault引数を利用してidを結びつけてますが、idをButtonの属性として書き込む手もあるので状況に応じて使い分けると良いと思います。
48
+
49
+
50
+
51
+ ```
52
+
53
+ def build(self):
54
+
55
+ layout = GridLayout(cols = yoko)
56
+
57
+ id = 0
58
+
59
+ for i in range(tate):
60
+
61
+ for j in range(yoko):
62
+
63
+ id += 1
64
+
65
+ button = Button(text=str(id), on_press=self.buttonClicked)
66
+
67
+ button.my_id = str(id)
68
+
69
+ layout.add_widget(button)
70
+
71
+ return layout
72
+
73
+
74
+
75
+ def buttonClicked(self, instance):
76
+
77
+ print(instance.my_id,"クリックした")
78
+
79
+ instance.enabled = False
80
+
81
+ ```

2

追記

2021/07/02 12:51

投稿

gottadiveintopy
gottadiveintopy

スコア736

test CHANGED
@@ -36,4 +36,4 @@
36
36
 
37
37
 
38
38
 
39
- 具体的にどう違うんですか?
39
+ 具体的にどう違うんですか?`layout.children`と`appendで作ったボタンリスト`の中身の順番が逆だということならそれで正常です。

1

追記

2021/07/02 10:18

投稿

gottadiveintopy
gottadiveintopy

スコア736

test CHANGED
@@ -6,6 +6,34 @@
6
6
 
7
7
  - lambdaの落とし穴に引っかかっているので[これ](https://docs.python.org/ja/3/faq/programming.html#why-do-lambdas-defined-in-a-loop-with-different-values-all-return-the-same-result)を読んでおくのを薦めます。
8
8
 
9
- - Buttonを無効にしたい時は`Buttonのinstance.enabled = False`です。
9
+ - Buttonを無効にしたい時は~~`Buttonのinstance.enabled = False`~~`Buttonのinstance.disabled = True`です。
10
10
 
11
11
  - `on_press = lambda x: self.buttonClicked(str(id))`の`x`にButtonのinstanceが入ってます。
12
+
13
+
14
+
15
+ ### 追記:3番目のcommentへの返事
16
+
17
+
18
+
19
+ > instance.disabled = True にしたら、できました!書いていることは同じようでも、違うんですね…。
20
+
21
+
22
+
23
+ 英語の意味的に同じであれば何でも良いってわけじゃないので`disabled = True`を`enabled = False`に自由に置き換えたりはできないですね。因みにわからないことをどうやって調べてますか?今回のように`Button`を無効化したいのなら`kivy button disable`でググれば[答え](https://stackoverflow.com/a/19843015)がすぐに出てきますよ。
24
+
25
+
26
+
27
+ > また、引数を instance, n = id にしてみましたが ... 動作しませんでした。
28
+
29
+
30
+
31
+ もし`self.buttonClicked(n)`の部分がそのままであればそうなりますね。`buttonClicked()`の定義を見ると第二位置引数は`instance`となっているのでそこにはButtonのinstanceを渡さないといけないわけです。にも関わらず実際に渡しているのは`self.buttonClicked(n)`で分かる通り`n`という整数なので。
32
+
33
+
34
+
35
+ > layoutoのボタンと、同時にappendで作ったボタンリストでは、違ったものになってしまい、困っています…
36
+
37
+
38
+
39
+ 具体的にどう違うんですか?