サイバー大学生のマルチリンガルな日々

現役サイバー大学生3年生が外国語からプログラミング言語を使った日々を垂れ流す

pythonでスマホアプリを軽く作ってみた

f:id:humuhimi:20190114213911p:plain

kivyウェブページ

 

どうも!ホームレスエンジニアのhumuです

 

今日は、pythonで用意されているGUIアプリを開発するためのマルチプラットフォーム用のオープンソースライブラリの「kivy」について紹介したいと思います。

 

 

kivy.org

 

 

iphoneやandoridのスマホアプリやmacOSやwindowsOS上で動く動作するマルチプラットフォームアプリについて紹介します。

 

特徴として、macOS、windowsOS,Linux上で同一のプログラムを動かすことができます。

 

また、raspbbery pi上でも動かすことができ、タッチ機能をサポートしているためタブレット利用も可能です。

 

オープンソースで提供され、商用利用も可能です。

 

コードを書く際はpythonコードとUIのコードをわけて書きます。

 

UIはkivy独自のkv言語を使用していきます。

 

まずkivyをインストールしましょう!

 

 

pythonのパッケージ管理コマンドのpipでインストールしてみよう↓

 

 

早速"hello world"してみましょう!

 

以下のコードを書き込んでみてください ↓

 

from kivy.app import App
from kivy.uix.button import Button

class TestApp(App):
def build(self):
return Button(text='Hello World')

TestApp().run()

 

Appクラスはアプリを作る上で必須のクラスで継承した上で、必要なボタンなどを追加していき走らせます。

 

そうするとちゃんと、hello worldと出力されましたね!

 

デスクトップではこんな感じです↓

 

f:id:humuhimi:20190114221427p:plain

hello world with kivy

次は、kv言語を使っていきましょう!

pythonファイルを↓

from kivy.app import App
 
class TestApp(App):
pass
 
TestApp().run()

 

kvファイルを

BoxLayout:
orientation: 'vertical'
 
Button:
text: "Hello World"
Label:
text: "Hello World2"
TextInput:
text: "Hello World3"

 にしてください。 

 

そうすると、このようになります↓

 

f:id:humuhimi:20190114223458p:plain

kivy with .kvファイル

 

kvファイルはUIを担当しています

また、orientationでverticalを指定しているので、縦に並んだ形になります。

ちなみに、horizontalで横並びになります。

*orientation指定はウィジェットの並び方なので注意してください

*kivyではUIパーツのことをwidgetと呼びます。

 

 

最後に、ボールが跳ね回るアプリを作ってみた

 

main.py

#:kivy 1.0.9
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.clock import Clock
from kivy.properties import NumericProperty, ReferenceListProperty, ObjectProperty
from kivy.vector import Vector
from random import randint


class PongGame(Widget):
ball = ObjectProperty(None)

def serve_ball(self): #review
self.ball.center = self.center
self.ball.velocity = Vector(4, 0).rotate(randint(0, 360))

def update(self, dt):
# dt means delta-time
# call ball.move and other stuff
self.ball.move()

# bounce off top and bottom
if (self.ball.y < 0) or (self.ball.top > self.height):
self.ball.velocity_y *= -1 #review
 
# bounce off left and right
if (self.ball.x < 0) or (self.ball.right > self.width):
self.ball.velocity_x *= -1


class PongBall(Widget):
# Validation for a NumericProperty will check that your value is a numeric type
velocity_x = NumericProperty(50)
velocity_y = NumericProperty(50)
velocity = ReferenceListProperty(velocity_x, velocity_y)

def move(self):
self.pos = Vector(*self.velocity) + self.pos



class PongApp(App):
def build(self):
game = PongGame()
Clock.schedule_interval(game.update, 1.0/60.0)
return game



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

 

test.kv

 

<PongBall>:
size: 50, 50
Ellipse:
pos:self.pos
size:self.size

<PongGame>:
ball:pong_ball
Rectangle:
pos: self.center_x - 0,5
size:10, self.height
 
Label:
font_size: 70
center_x: root.width / 4
top: root.top - 50
text: "0"
 
Label:
font_size: 70
center_x: root.width * 3 / 4
top: root.top - 50
text: "0"

PongBall:
id: pong_ball
center: self.parent.center

 

 結果このようになりました!

f:id:humuhimi:20190114231255g:plain

kivyアプリPong game

 

ここから、作れるのでよかったらドキュメントをみてくださいね!

kivy.org

 

では、いい1日を!

ありがとうございました!