はじめに
今回からは、Python の Kivy ライブラリを使用してKivyのチュートリアルを実施していきます。
Widget 系の説明は
Python Kivyの使い方① ~Kv Languageの基本~
上記サイトを参考にさせていただきました。
最終的には Kivy と Yolov8 を使用して画像認識アプリの完成を目指します。
前提条件
前提条件は以下の通りです。
- Python がインストールされている
- Windows11 (Ubuntuでも可?)
Kivy のインストール
kivy には pyenv が推奨されているので、先に pyenv をインストールします。
windows の場合
powershell で以下のコマンドを実行してください。こちらのgithubを参考にしました。
python -m pip install pyenv-win --target $HOME\\.pyenv
Ubuntu の場合
Ubuntu の場合は、bashrc に登録が必要になります。こちらのgithubを参考にしました。
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
source ~/.bashrc
pyenv install 3.10.6 #今回は3.10.6ですが、labelImgを動かすための変更が面倒な方は3.10以外で。
pyenv global 3.10.6
pyenv の有効化
pyenv がインストール出来たら、仮想環境を作成していきます。
mkdir kivy-dev
python -m venv venv310
source ./venv310/scripts/activate #Linux
./venv310/Scripts/Activate.ps1 #Windows
これで準備は完了です。
Kivy のインストール
Kivy のインストール方法を説明します。今回はこちらの公式サイトを参考にしました。
python -m pip install "kivy[full]" kivy_examples
これで完了です。
Kivy の実行例
画面を表示してみる
test_1.py を作成して動かしてみます。
from kivy.app import App
from kivy.uix.widget import Widget
class MyWidget(Widget):
pass
class MyApp(App):
def build(self):
return MyWidget()
if __name__ == '__main__':
MyApp().run()
以下のように黒い画面が表示されます。
ボタンを表示する
画面にボタンを表示してみます。
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
class MyApp(App):
def build(self):
layout = BoxLayout(padding=10)
button = Button(text='My first button')
layout.add_widget(button)
return layout
if __name__ == '__main__':
MyApp().run()
上記を実行すると画面にでかいボタンが現れます。
BoxLayout の中に Button を埋め込んでいます。
レイアウトの詳細な説明はこちらの公式サイトにあります。
ボタンサイズ変更
ボタンサイズは、size_hint_x, size_hint_y で調整します。
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
class MyWidget(Widget):
pass
class MyApp(App):
def build(self):
layout = BoxLayout(padding=10)
button1 = Button(text='My first button', size_hint_y=0.2, size_hint_x=0.5)
layout.add_widget(button1)
return layout
if __name__ == '__main__':
MyApp().run()
上記を実行すると、以下のようになります。
最下部にボタンが表示されました。
Kivy では座標原点が左下になる関係で、下部にボタンが表示されます。
ボタン位置変更
ボタン位置を変更するには、pos を使用します。
今回はボタンに直接適用させず、BoxLayout に適用します。
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
class MyWidget(Widget):
pass
class MyApp(App):
def build(self):
layout = BoxLayout(padding=10, pos=(250,250))
button1 = Button(text='My first button',
size_hint_y=0.2,
size_hint_x=0.5)
layout.add_widget(button1)
return layout
if __name__ == '__main__':
MyApp().run()
上記を実行すると、以下のようになります。
初期画面サイズは 640×480 なので、おおよそ真ん中あたりに BoxLayout の左上の頂点がセットされました。
ボタンを増やす
ボタンを増やすには、BoxLayout に追加していくだけです。
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
class MyWidget(Widget):
pass
class MyApp(App):
def build(self):
layout = BoxLayout(padding=10)
button1 = Button(text='My first button',
size_hint_y=0.2,
size_hint_x=0.5)
button2 = Button(text='My second button', size_hint_y=0.2)
layout.add_widget(button1)
layout.add_widget(button2)
return layout
if __name__ == '__main__':
MyApp().run()
上記を実行すると、以下のようになります。
ボタンを縦方向に配置
2個のボタンを水平方向ではなく、垂直方向に配置していきます。
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
class MyWidget(Widget):
pass
class MyApp(App):
def build(self):
layout = BoxLayout(padding=10, orientation="vertical")
button1 = Button(text='My first button',
size_hint_y=0.2,
size_hint_x=0.5)
button2 = Button(text='My second button', size_hint_y=0.2)
layout.add_widget(button1)
layout.add_widget(button2)
return layout
if __name__ == '__main__':
MyApp().run()
上記を実行すると、以下のようになります。
縦方向に配置できました。
レイアウトを kv language で表記
VSCode に Kivy-Snippet をインストール しておいてください。
kivy では、今まで test_1.py に表記したレイアウトを kv language で表現できます。ファイル拡調子は .kv です。
まずは、test_2.py を作成します。
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.lang.builder import Builder
Builder.load_file('test_2.kv')
class MyWidget(BoxLayout):
pass
class MyApp(App):
def build(self):
return MyWidget()
if __name__ == '__main__':
MyApp().run()
これだけです。
次に、test_2.kv を用意します。
<MyWidget>:
orientation:'vertical'
size_hint_y: 0.5
size_hint_x: 0.5
Button:
text: 'my first button'
Button:
text: 'my second button'
以上です。
早速、実行してみてください。
おわりに
今回は BoxLayout 上でボタンを様々な方法で配置しました。
次回は FloatLayout を説明しつつ、他の Widget についても説明できればと思います。
コメント