PythonのGUIモジュール Kivyメモ
自分のiphone用にアプリ製作していてハマったことなどのメモです。
まだアプリは制作中で、
あくまで自分が見返す用のめちゃくちゃなノートなので
参考にはならないと思います。
まだ理解できていないことが理解できていないまま書いてあります。
いろいろ
iOSやアンドロイド、macなどいろいろなプラットフォームで使えるものが書けるらしい。iosに入れられる物を作るのが目標。
pyhtonの.pyファイルの他に.kvファイルという、kivy専用言語の別ファイルを使うことがみんな多いらしい。同じディレクトリに入れとく。
これは使わなくても良いが、使うと.pyファイルがhtmlファイル、.kvがcssみたいな関係でデザインをしやすいらしい。でも.kvはデザインだけじゃないのでちょっと違うらしい。
ウィンドウサイズ
pyファイルに書く。
from kivy.config import Config
Config.set('graphics', 'width', '375')
Config.set('graphics', 'height', '667')
デザインの構造
スライドして画面を切り替えたいのでScreenManagementというのに入れる。
<画面の名前>
そのなかにBoxLayout入れてさらにボタンやらラベルやらを入れる。
ボタンを押した時のコマンド
pyファイル
class ScreenManagement(ScreenManager):
pass
kv
ScreenManagement:
id: screen_manager
transition: SlideTransition()
#transition: FadeTransition()
TradeScreen:
id: trade_screen
name: 'trade'
manager: 'screen_manager'
SettingScreen:
id: setting_screen
name: 'setting'
manager: 'screen_manager'
MenuScreen:
id: menu_screen
name: 'menu'
manager: 'screen_manager'
#############################################
<MenuScreen>:
BoxLayout:
orientation: 'vertical'
Label:
text: 'Zawagiri ver.01'
#font_size: 20
Button:
text: 'トレード画面へ'
#font_size: 30
on_release:
app.root.transition = SlideTransition(direction="left")
app.root.current = 'trade'
Button:
text: '設定'
#font_size: 30
on_release:
app.root.transition = SlideTransition(direction="up")
app.root.current = 'setting'
背景色とかテキストカラーとかのとこがまだわからない。書き方がいろいろあるのか?。
back_ground_cl = "#ffffff"#white
header_L_cl= "#00a7db"#blue
header_R_cl= "#6cbb5a"#green
###########################################################
Label:
text: "xxx"
size_hint_y: 0.7
id: pos_average
color: root.text_color
canvas.before:
Color:
rgba: rgba(root.account_cl)
Rectangle:
pos: self.pos
size: self.size
変数をpyからkvに渡すのがめんどい
from kivy.properties import StringProperty, ListProperty
###########################################################
text = StringProperty()
menu_button_cl = ListProperty([0.5,0.5,0.5,1])#green
###########################################################
canvas.before:
Color:
rgba: rgba(root.header_L_cl)
Rectangle:
pos: self.pos
size: self.size
画面の切り替えでスライド方向をいじれるやつ 使えるSlideTransition
これを.pyファイルに入れとく
from kivy.uix.screenmanager import ScreenManager, Screen, SlideTransition
class ScreenManagement(ScreenManager):
pass
###########################################################
これを.kvファイルに入れとく。#も書くのが慣れなくて、わからなかった。
#:import SlideTransition kivy.uix.screenmanager.SlideTransition
ScreenManagement:
id: screen_manager
transition: SlideTransition()
TradeScreen:
id: trade_screen
name: 'trade'
manager: 'screen_manager'
SettingScreen:
id: setting_screen
name: 'setting'
manager: 'screen_manager'
MenuScreen:
id: menu_screen
name: 'menu'
manager: 'screen_manager'
###########################################################
Button:
text: '設定'
#font_size: 30
on_release:
app.root.transition = SlideTransition(direction="up")
#directionはup,down,right,leftができる。
app.root.current = 'setting'
チェックボックス、というかラジオボックス 使える
常にどれかにチェックするようにしたい。が、やり方がわからない
BoxLayout:#チェックボックス
orientation: 'horizontal'
CheckBox:
group: "gp01"#グループをそろえるとその内一つだけオンになる。
id: check_AAA
on_active:#チェックした時発動
root.test_switch()
Label:
#size: self.texture_size
size_hint_x: 0.7
text: 'AAA'
halign: 'left'
color: root.black
#------------------------------------------
BoxLayout:
orientation: 'horizontal'
CheckBox:
group: "gp01"#グループをそろえるとその内一つだけオンになる。
id: check_BBB
active: 1 #これ入れとくとデフォルトでオンになる
Label:
#size: self.texture_size
text: 'BBB'
BoxLayoutの背景色
canvas.before:を使うといけた。ルートウィジェットの後ろにそのサイズの長方形を描く。それに色をつけるということらしい。
rgbaはRGBに透明度(アルファチャンネル)を追加したもの。全ての色表現が可能。
BoxLayout:
orientation: 'vertical'
size: root.size
padding:[0,0,0,0]
canvas.before:#この辺がひつようらしい。
Color:
rgba: rgba( "#ffffff")
Rectangle:
pos: self.pos
size: self.size
Label:#コメント用
size_hint_y: 0.05
text: '設定'
color: root.text_color
canvas.before:
Color:
rgba: rgba( "#ffffff")
Rectangle:
pos: self.pos
size: self.size
パスワードを隠して入力 使える
TextInput:
password:True
text: 'ここにパス入れる'
パスワードとかAPIとかを保存 使えてる
py
from kivy.storage.jsonstore import JsonStore
from os.path import join
class SettingScreen(Screen):
data_dir = App().user_data_dir#よくわからない
store = JsonStore(join(data_dir, 'storage.json'))
#storeっていうファイルができる?storage.json?
###ここから 必要みたい、なぜかはわからない。
try:
store.get('all_api')['api_real']
except KeyError:
api_real = ""
else:
api_real = store.get('all_api')['api_real']
###ここまで
def get_api(self):
try:
store.get('all_api')['api_real']
#storeのall_apiのapi_realを取り出す。
except KeyError:
api_real = ""
else:
api_real = store.get('all_api')['api_real']
#************************************************
def on_save_api(self):
api_real = self.ids.api_real.text
#api_realはkvのid.idsはモジュールのやつだから必要。
SettingScreen.store.put('all_api', api_real=api_real)
kv
Label:
text: 'リアル口座のAPI'
TextInput:
password:True #書き込んだ時にパスワードみたいに隠すやつ
text: root.api_real
id: api_real #後から取り出す時にこのidを指定する
Button:#保存ボタン
text: '保存'
on_release:#クリックして離すと発動
root.on_save_api()#保存される。pyファイルにdefで内容書いてある。
保存したパスワードを暗号化したい。
いいなと思ったら応援しよう!
コーヒー飲みます。ありがとうございます。