質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Kivy

Kivyは、Pythonを用いたNUI開発のためのオープンソースフレームワーク。マルチタッチなど多くの入力に対応したNUIアプリなどを開発することができます。多くの環境で動作するクロスプラットフォームです。

checkbox

checkboxは、GUIのエレメントです。また、HTML<input>タグのtype属性で扱われる値を指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

1147閲覧

kivy,python recycleviewでCheckBoxを表示させる方法

sushiro_714

総合スコア0

Kivy

Kivyは、Pythonを用いたNUI開発のためのオープンソースフレームワーク。マルチタッチなど多くの入力に対応したNUIアプリなどを開発することができます。多くの環境で動作するクロスプラットフォームです。

checkbox

checkboxは、GUIのエレメントです。また、HTML<input>タグのtype属性で扱われる値を指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/05/27 09:47

前提・実現したいこと

kivy初心者です。

名前と年齢のデータをrecycleviewで表示させ、checkboxで選択したものを削除できるようにしたいです。データを表示させることはできました。しかし、checkboxを組み込もうとするとエラーが出ます。

様々なサイト見て試してみましたがチェックボックスを画面に出すことができません。初心者なので優しく教えてくださるとうれしいです。

python3.7.3

発生している問題・エラーメッセージ

BuilderException: Parser: File "<inline>", line 20: ... 18: CheckBox: 19: size_hint_x: .1 >> 20: active:root.is_checked 21: on_press: 22: active = self.active ... AttributeError: 'Row' object has no attribute 'is_checked' File "C:\Users\pseadmin\Anaconda3\envs\kivy\lib\site-packages\kivy\lang\builder.py", line 242, in create_handler return eval(value, idmap), bound_list File "<string>", line 20, in <module> File "kivy\weakproxy.pyx", line 32, in kivy.weakproxy.WeakProxy.__getattr__

該当のソースコード

python

1from string import ascii_lowercase 2from kivy.uix.checkbox import CheckBox 3from kivy.properties import StringProperty, BooleanProperty 4from kivy.app import App 5from kivy.lang import Builder 6from kivy.uix.boxlayout import BoxLayout 7from kivy.config import Config 8Config.set('graphics', 'fullscreen', 0) 9Config.set('graphics', 'width', 900) 10Config.set('graphics', 'height', 500) 11Config.set('graphics', 'resizable', 0) 12from kivy.core.text import LabelBase, DEFAULT_FONT 13from kivy.resources import resource_add_path 14resource_add_path('Fonts') 15LabelBase.register(DEFAULT_FONT, 'HGRMB.TTC') 16 17 18kv = """ 19<Row@BoxLayout>: 20 canvas.before: 21 Color: 22 rgba: 0.5, 0.5, 0.5, 1 23 Rectangle: 24 size: self.size 25 pos: self.pos 26 name: '' 27 age: '' 28 29 Label: 30 text: root.name 31 on_press: root.choose(self) 32 Label: 33 text: root.age 34 35 CheckBox: 36 size_hint_x: .1 37 active:root.is_checked 38 on_press: 39 active = self.active 40 root.is_checked = active 41 root.rv.data[root.get_view_index()]['is_checked'] = active 42 43<Test>: 44 canvas: 45 Color: 46 rgba: 0.3, 0.3, 0.3, 1 47 Rectangle: 48 size: self.size 49 pos: self.pos 50 rv: rv 51 orientation: 'vertical' 52 GridLayout: 53 cols: 2 54 rows: 2 55 size_hint_y: None 56 height: dp(108) 57 padding: dp(8) 58 spacing: dp(16) 59 Button: 60 text: '一覧表示' 61 on_press: root.alldata() 62 Button: 63 text: '保存' 64 on_press: root.save() 65 66 BoxLayout: 67 spacing: dp(8) 68 TextInput: 69 id: new_name_input 70 hint_text: '名前' 71 padding: dp(10), dp(10), 0, 0 72 73 TextInput: 74 id: new_age_input 75 hint_text: '年齢' 76 padding: dp(10), dp(10), 0, 0 77 78 BoxLayout: 79 spacing: dp(8) 80 Button: 81 text: '登録' 82 on_press: root.resister() 83 Button: 84 text: '削除' 85 on_press: root.remove() 86 87 Button: 88 text: '検索' 89 on_press: root.insert() 90 Button: 91 text: '編集' 92 on_press: edit 93 # on_press: root.edit() 94 RecycleView: 95 id: rv 96 scroll_type: ['bars', 'content'] 97 scroll_wheel_distance: dp(114) 98 bar_width: dp(10) 99 viewclass: 'Row' 100 RecycleBoxLayout: 101 default_size: None, dp(56) 102 default_size_hint: 1, None 103 size_hint_y: None 104 height: self.minimum_height 105 orientation: 'vertical' 106 spacing: dp(2) 107""" 108 109Builder.load_string(kv) 110 111 112class Test(BoxLayout): 113 114 def alldata(self): 115 self.rv.data=[] 116 self.rv.data.append({"name":"田中", "age":17,'is_checked': False,}) 117 118 119 def save(self): 120 pass 121 122 def resister(self): 123 pass 124 125 def remove(self): 126 self.rv.data = [record for record in rv.data if not record['is_checked']] 127 128 129 def insert(self): 130 pass 131 132 def edit(seif): 133 pass 134 135class Row(BoxLayout): 136 name = StringProperty() 137 age = StringProperty() 138 is_checked = BooleanProperty() 139 140 @property 141 def rv(self): 142 return self.parent.recycleview 143 144 def get_view_index(self): 145 return self.parent.get_view_index_at(self.center) 146 147 148class TestApp(App): 149 def build(self): 150 return Test() 151 152 153if __name__ == '__main__': 154 TestApp().run()

簡略化してあります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

Python側で基底classを指定した場合はKv言語側では指定すべきではないので<Row@BoxLayout>:<Row>:としてみてください。

投稿2021/05/28 23:20

gottadiveintopy

総合スコア736

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問