Python

Python kivyの使い方③|ボタンの実装

Python
「Kivy」ではじめるPythonプログラミング―グラフィックライブラリでアニメーションを表現! (I・O BOOKS) | 清水 美樹 |本 | 通販 | Amazon
Amazonで清水 美樹の「Kivy」ではじめるPythonプログラミング―グラフィックライブラリでアニメーションを表現! (I・O BOOKS)。アマゾンならポイント還元本が多数。清水 美樹作品ほか、お急ぎ便対象商品は当日お届けも可能。また「Kivy」ではじめるPythonプログラミング―グラフィックライブラリでアニ...

はじめに

Python kivyについて前回までの内容では、ボタンを追加する方法まででした。
今回の内容では、Python kivyで「ボタン」を動作の実装まで解説します。そこで今回は、ボタンをクリックすると、「ハローワールド」と表示し、ボタンを離すと表示が消えるといったGUIを設計します。
実装するにあたり、今回から「Widget」クラスを活用するので、その解説から始めます。

「Widget」クラスとは?

そもそも、「Widget」とはなんでしょう?というところから解説します。

ウィジェット (Widget)

グラフィカルユーザインターフェースの構成要素、及びその集まりを指します。

つまり、Widgetの中に「Label」や「Buttom」などの部品が格納されているということです。

「Widget」クラスの使い方(pyファイル)

まずWidgetの全文を示します。そのあと一行一行解説します。

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.properties import StringProperty
from kivy.core.text import LabelBase, DEFAULT_FONT
from kivy.resources import resource_add_path

resource_add_path("文字ファイルのディレクトリを指定する")
LabelBase.register(DEFAULT_FONT, "文字ファイルを指定する")

class Widgets(Widget):
    text = StringProperty()    # プロパティの追加

    def __init__(self, **kwargs):
        super(Widgets, self).__init__(**kwargs)
        self.text = ''

    def buttonClicked(self):        # ボタンをクリック時
        self.text = 'ハローワールド'

    def buttonReleased(self):
        self.text= ''

class TestApp(App):

    def __init__(self, **kwargs):
        super(TestApp, self).__init__(**kwargs)
        self.title = 'greeting'

    def build(self):
        return Widgets()

if __name__ == '__main__':
    TestApp().run()

次にclass Widgetsのみ抜粋します。

from kivy.uix.widget import Widget
class Widgets(Widget):
    text = StringProperty()    # プロパティの追加

    def __init__(self, **kwargs):
        super(Widgets, self).__init__(**kwargs)
        self.text = ''

    def buttonClicked(self):        # ボタンをクリック時
        self.text = 'ハローワールド'

    def buttonReleased(self):       # ボタンをリリース時
        self.text= ''
from kivy.uix.widget import Widget

Widgetを呼び出すコードになります。

class Widgets(Widget):
    text = StringProperty()    # プロパティの追加

「Widgets」という名前で新しくクラスを作成します。()の中のWidgetは、継承をしています。継承と継承元を親クラス、継承先を子クラスと呼び、子クラスは親クラスの性質(メソッド等)を引き継ぐことを指します。
textというプロパティを追加します。という意味です。

def __init__(self, **kwargs):
    super(Widgets, self).__init__(**kwargs)
    self.text = ''

selfは、インスタンス自身を示すものです。**kwargsは可変長引数です。superとは継承を示します。意味合いとしては「selfを自身の親クラスのオブジェクトとみなし、そのコンストラクタで初期化する」ということになります。
self.textに何も入れないという意味です。なので、初期状態では何のテキストも入っていない状態です。

def buttonClicked(self):        # ボタンをクリック時
   self.text = 'ハローワールド'

def buttonReleased(self):       # ボタンをリリース時
   self.text= ''

buttonClicked(self):でボタンを押したときの動作を定義します。
self.textにハローワールドと入れます。
buttonReleased(self):でボタンを話したときの動作を定義します。
self.textに何も入れないと指示します。

「Kivy」ではじめるPythonプログラミング―グラフィックライブラリでアニメーションを表現! (I・O BOOKS) | 清水 美樹 |本 | 通販 | Amazon
Amazonで清水 美樹の「Kivy」ではじめるPythonプログラミング―グラフィックライブラリでアニメーションを表現! (I・O BOOKS)。アマゾンならポイント還元本が多数。清水 美樹作品ほか、お急ぎ便対象商品は当日お届けも可能。また「Kivy」ではじめるPythonプログラミング―グラフィックライブラリでアニ...

「Widget」クラスの使い方(kvファイル)

まずWidgetsの全文を示します。

<Widgets>:
    BoxLayout:
        orientation: 'vertical'
        size: root.size

            # ラベル
        Label:
            id: label1
            font_size: 100
            text: root.text

        Button:
            id: button1
            text: "Push"
            font_size: 150
            on_press: root.buttonClicked()
            on_release: root.buttonReleased()

on_pressでボタンを押したときの動作を定義します。root.buttonClicked()はpyファイル(<Widgets>クラスの)のbuttonClicked()を呼び出しています。
on_releaseボタンを離したときときの動作を定義します。root.buttonReleased()はpyファイル(<Widgets>クラスの)のbuttonReleased()を呼び出しています。

実行結果

立ち上げ初期状態

「Push」ボタンを押す。

ボタンを離す。

画像に alt 属性が指定されていません。ファイル名: image-34-1024x799.png
「Kivy」ではじめるPythonプログラミング―グラフィックライブラリでアニメーションを表現! (I・O BOOKS) | 清水 美樹 |本 | 通販 | Amazon
Amazonで清水 美樹の「Kivy」ではじめるPythonプログラミング―グラフィックライブラリでアニメーションを表現! (I・O BOOKS)。アマゾンならポイント還元本が多数。清水 美樹作品ほか、お急ぎ便対象商品は当日お届けも可能。また「Kivy」ではじめるPythonプログラミング―グラフィックライブラリでアニ...

コメント

タイトルとURLをコピーしました