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

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

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

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

Python

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

Q&A

1回答

1297閲覧

KVファイルで作ったウィジェットにアクセスする方法

nugio.kutusita

総合スコア21

Kivy

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

Python

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

0グッド

0クリップ

投稿2021/03/23 14:49

編集2022/01/12 10:55

python初心者で、kivyを触るのは初めてです。
練習にkivyで簡単なアプリを作っています。

ボタンウィジェットからメインの関数を呼び出し、
その関数の中でKVファイル内で作ったウィジェットに対して操作をしたいです。

今のテスト段階では、ボタンを押すとラベルのテキストを変える、というだけです。
ここでは、0のボタンを押すとid:type1のtextを0にする、という操作がしたいのですが、
AttributeError: 'MainScreen' object has no attribute 'type1'
ということで呼び出せません。

基本的なことが分かってないと思うのですが、ご教示お願いします。

※追記
色々調べたところ、idはインスタンス名ではない、ということは何となく理解できたのですが、
self.ids.xx を使った書き方や、プロパティを追加する?やり方があるようですが、
結局どのように解決するのがいいのかにたどり着けていません。

また別のやり方として、
クラス変数に文字列をもって、type1のラベルがそれを参照するようにしている例を見つけたのですが、
変数の内容が変わったら表示が更新される理由がわかりませんでした。

python

1 2class MainScreen(BoxLayout): 3 def __init__(self, **kwargs): 4 super().__init__(**kwargs) 5 def select_type(self, number): 6 self.type1.text=number 7 8class TestApp(App): 9 def build(self): 10 MS = MainScreen() 11 return MS 12 13if __name__=="__main__": 14 TestApp().run()

KV

1<MainScreen>: 2 3 BoxLayout: 4 orientation: 'vertical' 5 Label: 6 id:"type1" 7 text:"-" 8 size_hint_y:1 9 Label: 10 id:"type2" 11 text:"-" 12 size_hint_y:1 13 BoxLayout: 14 size_hint_y:0.5 15 Button: 16 text:"0" 17 on_press: root.select_type(self.text) 18 Button: 19 text:"1" 20 Button: 21 text:"2" 22 Button: 23 text:"3"

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

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

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

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

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

guest

回答1

0

Kv言語のid:"type1"id:"type2"に含まれている"を消して、self.type1.text=numberself.ids.type1.text=numberとしてみてください。

投稿2021/04/11 04:55

gottadiveintopy

総合スコア736

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問