質問編集履歴

2 コード修正

mathing

mathing score 19

2018/01/23 22:07  投稿

Kivyのボタン入力と表示に関して。
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"].print_number(self.text)
on_press: root.ids["ScreenOne"].zero_clicked(self.text)
```
```ここに言語を入力
on_press: root.ids["display"].print_number(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
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
SM = ScreenManager()
class ScreenOne(Screen):
   def zero_clicked(self, number):
       text = "{}{}".format(self.display.text, number)
       self.display.text = text
   def next_clicked(self):
       SM.current = "Two"
class ScreenTwo(Screen):
   def back_clicked(self):
       SM.current = "One"
class TEST1(App):
   def build(self):
       SM.add_widget(ScreenOne(name="One"))
       SM.add_widget(ScreenTwo(name="Two"))
       return SM
if __name__ == "__main__":
   TEST1().run()
```
TEST1.kv
```Kivy
#:kivy 1.10.0
<ScreenOne>:
   BoxLayout:
       orientation: "vertical"
       TextInput:
           id: display
           size_hint_y: 1
           font_size: 100
       BoxLayout:
           size_hint_y: 2
           Button:
               id: zero
               text: "0"
               on_press: root.ids["ScreenOne"].zero_clicked(self.text)
           Button:
               id: clear
               text: "Clear"
           Button:
               id: next
               text: "Next"
               on_press: root.next_clicked()
<ScreenTwo>:
   Button:
       id: back
       text: "Back"
       on_press: root.back_clicked()
<Button>:
   font_size: 60
```
  • Python 3.x

    17457 questions

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

1 記載ミスのため

mathing

mathing score 19

2018/01/23 22:06  投稿

Kivyのボタン入力と表示に関して。
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"].print_number(self.text)
```
```ここに言語を入力
on_press: root.ids["display"].print_number(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
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
SM = ScreenManager()
class ScreenOne(Screen):
   def zero_clicked(self, number):
       text = "{}{}".format(self.display.text, number)
       self.display.text = text
   def next_clicked(self):
       SM.current = "Two"
class ScreenTwo(Screen):
   def back_clicked(self):
       SM.current = "One"
class TEST1(App):
   def build(self):
       SM.add_widget(ScreenOne(name="One"))
       SM.add_widget(ScreenTwo(name="Two"))
       return SM
if __name__ == "__main__":
   TEST1().run()
```
TEST1.kv
```Kivy
#:kivy 1.10.0
<ScreenOne>:
   BoxLayout:
       orientation: "vertical"
       TextInput:
           id: display
           size_hint_y: 1
           font_size: 100
       BoxLayout:
           size_hint_y: 2
           Button:
               id: zero
               text: "0"
               on_press: root.ids["ScreenOne"].print_number(self.text)
               on_press: root.ids["ScreenOne"].zero_clicked(self.text)
           Button:
               id: clear
               text: "Clear"
           Button:
               id: next
               text: "Next"
               on_press: root.next_clicked()
<ScreenTwo>:
   Button:
       id: back
       text: "Back"
       on_press: root.back_clicked()
<Button>:
   font_size: 60
```
  • Python 3.x

    17457 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る