python3,kivyで一から勉強しております。
以前、pythonのみで同じことをしていましたが、スマホに対応させるために、kivyで書き直しています。
###やりたいこと
GridLayoutを用いて指定した数だけボタンを配置し、クリックすると属性をdisableにしたいのです。
しかし、以下のコードを書いてみましたが、ボタンが表示されず、真黒な画面にしかなりません。
layoutを別に定義しないといけないのでしょうか?教えてください。
kivy
1from kivy.app import App 2from kivy.uix.gridlayout import GridLayout 3from kivy.uix.floatlayout import FloatLayout 4from kivy.uix.button import Button 5 6tate = 4 7yoko = 5 8sosu = tate*yoko 9 10class kvfile(App): 11 def build(self): 12 return ZasekiWindow() 13 14class ZasekiWindow(GridLayout): 15 def __init__(self, **kwargs): 16 super(ZasekiWindow, self).__init__(**kwargs) 17 self.title = 'ボタン一覧' 18 self.buttons() 19 20 def buttons(self): 21 layout = GridLayout(cols = yoko) 22 id = 0 23 for i in range(tate): 24 for j in range(yoko): 25 id += 1 26 layout.add_widget(Button(text=str(id),on_press = lambda x: self.buttonClicked(str(id))) 27 ) 28 29 def buttonClicked(self,id): 30 print("クリックした") 31 instance.disable = False 32 33if __name__ == "__main__": 34 kvfile().run()
今後としては、データを読み取り、入力済みのボタンは、最初からdisableにしたいと考えています。
また、違うデータを読み取ったら再描画したいと考えています。
書き方がpythonの時と違ってしまい、戸惑っています。
よろしくお願いします。
###訂正後
最初は省略
python
1class kvfile(App): 2 title = 'チェック表' 3 4 def build(self): 5 layout = GridLayout(cols = yoko) 6 id = 0 7 for i in range(tate): 8 for j in range(yoko): 9 id += 1 10 layout.add_widget(Button(text=str(id),on_press = lambda n = id : self.buttonClicked(n)) 11 ) 12 return layout 13 14 def buttonClicked(self,instance): 15 print(instance,"クリックした") 16 instance.enabled = False 17 18if __name__ == "__main__": 19 kvfile().run()
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/02 00:38
2021/07/02 01:07 編集
2021/07/02 03:43
2021/07/02 11:18 編集
2021/07/02 13:21 編集