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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

Q&A

解決済

1回答

3518閲覧

Python Kivy とある処理を実行させる方法

EdwardRichtofen

総合スコア32

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

0グッド

0クリップ

投稿2017/09/13 12:18

下記のさんぷるこーどについてですが、主にTestクラス内の処理のタイミングにおいて
このような形で記入すればkivy側でアクションを起こすことで(on_press等の)実行できることはわかりました。
例えばpopulate関数の処理をon_press時ではなく、読み込み時に処理させたいと思い試してみました。
試した内容としてはkivy側で定義した"rv"をpython側で取得するため"rv = ObjectProperty(None)"にて試みましたが、data属性がないため実行できないと怒られました。
こういった関数内の処理を画面表示時に実行するにはどのように書けばよいでしょうか?

python

1from random import sample 2from string import ascii_lowercase 3from kivy.config import Config 4Config.set('graphics', 'width', '600') 5Config.set('graphics', 'height', '560') 6from kivy.app import App 7from kivy.lang import Builder 8from kivy.uix.boxlayout import BoxLayout 9 10 11kv = """ 12<Row@BoxLayout>: 13 canvas.before: 14 Color: 15 rgba: 0.5, 0.5, 0.5, 1 16 Rectangle: 17 size: self.size 18 pos: self.pos 19 value: '' 20 Label: 21 text: root.value 22<Test>: 23 canvas: 24 Color: 25 rgba: 0.3, 0.3, 0.3, 1 26 Rectangle: 27 size: self.size 28 pos: self.pos 29 rv: rv 30 orientation: 'vertical' 31 GridLayout: 32 cols: 3 33 rows: 2 34 size_hint_y: None 35 height: dp(108) 36 padding: dp(8) 37 spacing: dp(16) 38 Button: 39 text: 'Populate list' 40 on_release: root.populate() 41 Button: 42 text: 'Sort list' 43 on_press: root.sort() 44 Button: 45 text: 'Clear list' 46 on_press: root.clear() 47 BoxLayout: 48 spacing: dp(8) 49 Button: 50 text: 'Insert new item' 51 on_press: root.insert(new_item_input.text) 52 TextInput: 53 id: new_item_input 54 size_hint_x: 0.6 55 hint_text: 'value' 56 padding: dp(10), dp(10), 0, 0 57 BoxLayout: 58 spacing: dp(8) 59 Button: 60 text: 'Update first item' 61 on_press: root.update(update_item_input.text) 62 TextInput: 63 id: update_item_input 64 size_hint_x: 0.6 65 hint_text: 'new value' 66 padding: dp(10), dp(10), 0, 0 67 Button: 68 text: 'Remove first item' 69 on_press: root.remove() 70 RecycleView: 71 id: rv 72 scroll_type: ['bars', 'content'] 73 scroll_wheel_distance: dp(114) 74 bar_width: dp(10) 75 viewclass: 'Row' 76 RecycleBoxLayout: 77 default_size: None, dp(56) 78 default_size_hint: 1, None 79 size_hint_y: None 80 height: self.minimum_height 81 orientation: 'vertical' 82 spacing: dp(2) 83""" 84 85Builder.load_string(kv) 86 87 88 89class Test(BoxLayout): 90 91 def populate(self): 92 self.rv.data = [{'value': ''.join(sample(ascii_lowercase, 6))}for x in range(5)] 93 94 def sort(self): 95 self.rv.data = sorted(self.rv.data, key=lambda x: x['value']) 96 97 def clear(self): 98 self.rv.data = [] 99 100 def insert(self, value): 101 self.rv.data.insert(0, {'value': value or 'default value'}) 102 103 def update(self, value): 104 if self.rv.data: 105 self.rv.data[0]['value'] = value or 'default new value' 106 self.rv.refresh_from_data() 107 108 def remove(self): 109 if self.rv.data: 110 self.rv.data.pop(0) 111 112 113class TestApp(App): 114 def build(self): 115 return Test() 116 117 118if __name__ == '__main__': 119 TestApp().run()

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

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

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

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

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

guest

回答1

0

自己解決

結果的にRecycleViewの使い方はよくわかりませんでした。
時期に廃止される予定のListViewでやります。


追伸

最初の自己解決ですが、よく考えるとこれで解決していることがわかりました。
Kivy側でrecycleviewを設定し、idも指定したうえでpython側で拾えるようにkvファイルの該当ウィジェットのルートで名前付けします。
もちろんスーパークラス定義内での動作です。
そのあとにpythonにて例えばこんな感じのコードを書けば動きました。

python

1self.rv.data.insert(0, {'value': '????'})

投稿2017/09/13 13:15

編集2017/09/13 13:26
EdwardRichtofen

総合スコア32

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問