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

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

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

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

Q&A

解決済

1回答

764閲覧

Kivyのボタン入力と表示に関して。

mathing

総合スコア19

Python 3.x

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

0グッド

0クリップ

投稿2018/01/23 12:06

編集2018/01/23 13:07

Kivy入門サイトを参考に、ボタンで入力された数字キーを表示するディスプレイを作ろうとしています。
0ボタンが押されたときにフレーム上段のディスプレイに0と表示させたいのですが、何度試してもうまく行きませんでした。どこが間違っているのかご存知でしたら教えていただけないでしょうか。
よろしくお願いします。

記載コードで実行し、0ボタンを押すと強制終了し下記のエラーが出ます。

File "c:\Users...\test1.kv", line 17, in <module>
on_press: root.ids["ScreenOne"].print_number(self.text)
KeyError: 'ScreenOne'

kvファイルの

on_press: root.ids["ScreenOne"].zero_clicked(self.text)

on_press: root.ids["display"].zero_clicked(self.text)

にした場合は下記のエラーが出ました。

File "kivy\weakproxy.pyx", line 30, in kivy.weakproxy.WeakProxy.getattr (kivy\weakproxy.c:1386)
AttributeError: 'TextInput' object has no attribute 'print_number'

test1.py

Python

1from kivy.app import App 2from kivy.uix.screenmanager import ScreenManager, Screen 3SM = ScreenManager() 4 5class ScreenOne(Screen): 6 def zero_clicked(self, number): 7 text = "{}{}".format(self.display.text, number) 8 self.display.text = text 9 def next_clicked(self): 10 SM.current = "Two" 11 12class ScreenTwo(Screen): 13 def back_clicked(self): 14 SM.current = "One" 15 16class TEST1(App): 17 def build(self): 18 SM.add_widget(ScreenOne(name="One")) 19 SM.add_widget(ScreenTwo(name="Two")) 20 return SM 21 22if __name__ == "__main__": 23 TEST1().run() 24

TEST1.kv

Kivy

1#:kivy 1.10.0 2<ScreenOne>: 3 BoxLayout: 4 orientation: "vertical" 5 TextInput: 6 id: display 7 size_hint_y: 1 8 font_size: 100 9 BoxLayout: 10 size_hint_y: 2 11 Button: 12 id: zero 13 text: "0" 14 on_press: root.ids["ScreenOne"].zero_clicked(self.text) 15 Button: 16 id: clear 17 text: "Clear" 18 Button: 19 id: next 20 text: "Next" 21 on_press: root.next_clicked() 22<ScreenTwo>: 23 Button: 24 id: back 25 text: "Back" 26 on_press: root.back_clicked() 27<Button>: 28 font_size: 60

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

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

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

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

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

guest

回答1

0

自己解決

全く違うやり方になってしまいましたが、解決しました。
pyファイル・KVファイルを下記コードに書き換えました。

Python

1~省略~ 2class ScreenOne(Screen): 3 """ class docstring """ 4 5 def next_clicked(self): 6 """ method docstring """ 7 SM.current = "Two" 8~省略~

Kivy

1#:kivy 1.10.0 2<ScreenOne>: 3BoxLayout: 4 display: entry 5 orientation: "vertical" 6 TextInput: 7 id: entry 8 size_hint_y: 1 9 font_size: 100 10 multiline: False 11 write_tab: False 12 BoxLayout: 13 size_hint_y: 2 14 Button: 15 text: "0" 16 on_press: entry.text += self.text 17~省略~

投稿2018/01/23 13:32

編集2018/01/23 13:35
mathing

総合スコア19

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問