Kivy-素晴らしい未来を持つ小さな果物







ようこそ!







しかし、今日では、もちろん、いつものように、小さな記事は注目に値するシンプルなものであり、フレーム、クロスデバイスのフレームでもあります。







pazpabotki clozhnyx ppilozhenyのためのB dannom matepiale pazveyany神話はトム・oを再生され、chto NE Kivy goditcyaは、oppovepgnytyのppedvzyatye意見kotopye ppedctavlyayut pazpabotchikamとzakazchikam Kivy、KAKマロpodxodyaschyと生産のためのcepeznoy pabotyとcovcem negodnymためkpivoy inctpymentを果たしています。







Cegodnyashnyaya ctatya bolno ydapitポーkoctylyam他のフレームワークは、彼らのposhatnytcyaをzactavit、ocoznat、彼らは通常chto NE yzhe otnyud edinctvennyeとpodvinytcya nazadでpeytinge kpoccplatfopmennoy pazpabotki、cppavedlivo yctypaya mecto Kivy、より急速な発展の面で両方のではなく、信頼性の低い、より収益性の高いツール!







興味のある方、猫の下で歓迎してくれる方にお願いします...







過去に戻る



少し後戻りして、年末にKivy サイクルの記事の2番目の部分を思い出したいと思います。 作成から本番まで -1 つのステップであり、ページXabrには表示されませんでした。 これは、昨年、私が他のプロジェクトで忙しかったほとんどすべての空き時間に、引用符で数時間の空き時間と眠りたいという欲求しかなかったという事実によるものです。







だから、ppotsecce paboty NAD obeschannymでvysheypomyanytoy ctate ppilozheniem PyConversations 、私poctypilo ppedlozhenie cdelat nebolshyyu ppogpammy nAのKivyわたしppocmotpaとnapicaniya poctov中のためgpyppy BKontakte 、kotopaya pocvyaschena tematike Kivy。







付録はまさにそのようなもので、人々に見せるために本当に素晴らしいことをするのはかなりの熱意でしたが、多くの白黒ではありませんo Kivyフレームワーク。つまり、ガ、クール、すごい、ひどく遅いことを意味しますが、本番環境ではまったく必要ではなく、ネイティブにjarする方が良いです。







これは非常に明確で、小さなフォガポッドであり、バックエンドプロジェクト(VK APIを使用)で応答されなかったため、少し拡張可能であることに気付かなかった。







この記事は、Kivyフレームワークの助けを借りて書かれたプロジェクトの可能性のデモです。 また、Haberでの私のソフトウェアとアクティビティはすべてKivyと関連しているため、優れた読者を共有しないでください!







不可視性



驚きはしませんでしたが、やはり同じように、Habreの記事でモバイル開発者向けの互換性のあるフレームの評価について常に観察していました。 あるいは、その意味で、Kivyはアプリケーションの簡単なプロトタイプ、単純なプログラムを作成するのにのみ適していて、何らかのReactのみを行うことができるという小さなコメントです。







Kivyフレームワークの開発について尋ねないことを考えて、私は少数の一般的なプログラマー(AndroidでPythonを精神的および物理的に受け入れることができない)を強調しましたが、簡単ですが、もっと簡単に言えば、







モクスおじさん、彼に土を投げてもいいですか?



発生1







Kivyアプリケーションは、トレイにしようとすると閉じます。







発生2







多数のウィジェットを持つ集計リストを操作する場合の生産性が低下します。







発生3







ネイティブインターフェイスと付録の欠如。







砂漠4







デバイスにインストールするための大きな合計パッケージ(15 Mbから)。







たとえば、VKGroupsの顧客がKivyフレームワークを使用しているとしましょう。この理由から...







発生1







Kivyアプリケーションは、トレイにしようとすると閉じます。













ご覧のとおり、3番目のアプリケーションをオフにしても閉じませんが、常に再起動して別のアプリケーションに読み込まれるCMBrowserなどのほとんどのネイティブアプリケーションとは異なり、スムーズに安定して実行されます。トレイを終了すると、アプリケーションと一連のAndroidプログラムがリロードされます。 しかし、何らかの理由でレーベルはKivyにのみ掛けられていました。 これは公平ではないと思いませんか?







発生2







多数のウィジェットを持つ集計リストを操作する場合の生産性が低下します。







Kivy 1.9.2のリリース前には、私も同じ意見を持っていました。 pazpabotke VKGroups、pockolky pendeping cpicka coctoyaschegoがさえdvadtsati poctov / kommentapiev(シャウトkactomny vidzhet pocta / kommentapiyaからCEMI vidzhetov KivyのpoctpoenたDannaya ppoblema ctala kamnem ppetknovenya VARIATIONS:ラベル、AsyncImage、ボタンなど、cymmeのpoctov * 7 20 Kivyウィジェット= 140ウィジェットとコントロール)













...かなりの時間(約10秒)かかったため、アプリケーションが完全に使用できなくなり、実稼働環境での使用に適さなくなりました。







この問題の解決策は非常に単純であることが判明しました-ScrollViewにない大きなリストを表示するために使用します。RecycleView-Kivy 1.9.2のバージョンで始まるウィジェットがリストに含まれています。







RecycleViewを使用したファイルマネージャの次の例は、1000個のアイテムのリストを開く方法を示しています(事前に作成したシステム上の1000個の空のテキストファイル)。













画面には10,000ポイントのうちのリストを表示できますが。 Haのパフォーマンスはこれに影響しません。RecycleViewは画面に表示される方法でリストオブジェクトを作成するためです。 レンダリングの速度は、リスト項目が設定されているウィジェットの複雑さにのみ依存します。







RecycleViewでリストを作成する簡単な例
from kivy.uix.boxlayout import BoxLayout from kivy.lang import Builder from kivy.app import App from kivy.utils import hex_colormap, get_color_from_hex from kivy.metrics import dp KV = """ #   . <Item@BoxLayout>: color: [] name_color: '' Label canvas.before: Color: rgba: root.color Rectangle: pos: self.pos size: self.size text: root.name_color color: 0, 0, 0, 1 #   . BoxLayout: orientation: "vertical" #   ScrollView. RecycleView: id: rv key_size: 'height' key_viewclass: 'viewclass' RecycleBoxLayout: id: box default_size: None, None default_size_hint: 1, None size_hint_y: None height: self.minimum_height orientation: 'vertical' spacing: dp(10) padding: dp(5) """ class RecycleViewApp(App): def build(self): self.root = Builder.load_string(KV) self.rv = self.root.ids.rv self.create() def create(self): colors = [] #  . for name_color in hex_colormap.keys(): colors.append({ "name_color": name_color, "viewclass": "Item", 'color': get_color_from_hex(hex_colormap[name_color]), 'height': dp(40) }) self.rv.data = colors RecycleViewApp().run()
      
      





次のアニメーションは、ほぼ同じレベルの複雑さのPyDroid3プログラムのネイティブファイルマネージャーの動作を示しています。













ご覧のとおり、作業速度はネイティブアプリケーションの作業と何の違いもありません。 さらに、Javaで書かれた同じレベルのファイルマネージャに会いましたが、それらはゆっくり動作します。







発生3







ネイティブインターフェイスと付録の欠如。







ここで、Kivyボックスには、Androidタグ、ボタン、ボタン、ボタン、スクリプト、ボタン、スクリプト、Dropbox、スクリプト、Dropbox、ボタン、BitButの開発に使用される標準のライブウィジェットとコントローラーの広範なリストがあることを言う価値があります ただし、Android 4テーマのデフォルト設定を使用した標準配信では、これらのウィジェットはすべて非常にクールで馬鹿げています。







あなたmozhete delat CそれらVCE chto zaxotite Odnako blagodapyaトミーchto日付ごとvidzhetとkontpoll Kivyのpezinovyとimeet kychy cvoyctv中とpapametpov、それらを見てlyuboy ppidatとpovedenie vplot DO dicneevckoy animatsiiとchto nAのcamom DELE etot vidzhetはynacledovanたdokazatデンマークの王子から これが、 Kivy Material Designの注目すべきライブラリーの登場です。これは非常に単純です。







「ネイティブ」という言葉を引用符で囲むと、これらはすべてJavaの兄弟のように見えて動作する同じKivyウィジェットであるということです。







砂漠4







デバイスにインストールするための大きな全パッケージ(15 MBから)







私はかつてフォーラムで、Kivyでの完成したアプリケーションの重量の問題を読みました。 コーディングの量に応じて、15 Mbからの1つの答えに非常に驚きました。 私は自信を持って、これはまったくナンセンスだと宣言します! Kivyアプリケーションのサイズは5〜6メートルである可能性があり、すべてプログラムのリソース(画像、オーディオファイル、追加のライブラリなど)に依存します。 そして、あなたはそれについて知らなかったかもしれませんが、Kivyで書かれた通常のHello worldには、プロジェクトから安全に破棄できる4〜5 MBの不要なファイルとライブラリがあります。







たとえば、KivyのアプリケーションPyonic Interpreter 3 -Android用Pyt​​hon 3.6 インタープリターをダウンロードしてインストールしました。 そのサイズは12メガバイトです。 パッケージから不要なものすべてを切り捨てました(約500キロバイトの標準ライブラリ、1メガバイトの不要なKivyフォント、2.2メガバイトの未使用の静的ライブラリ、および未使用のKivy自体のパッケージとモジュール)。 12メガバイトのパッケージサイズは8.2メートルになりました。 しかし、PyonicがライブラリpygmemtsとJedi(アプリケーションを中断せずに捨てることはできません)を使用しているという事実を考えると、これらは一緒にサイズが3.5メガバイトであり、最も単純なKivyアプリケーションの重量を簡単に計算できます多くの人が信じているように、10〜15メートルではなく4.6メートル。







この記事では、未使用のリソースをフィルタリングする技術については触れないため、Pyonicアプリケーションのインストールと実行のデモを紹介します。 インストールパッケージのサイズに注意してください。









ネイティブ性のテーマを続けると、Kivyアプリケーションでは、Kivy自体の機能が不足している場合にJava APIを使用できることに注意してください。 たとえば、ネイティブブラウザー、モーダルダイアログ、トースト、ジオロケーションなど、Javaプログラマーが利用できるその他のツールを使用できます。 特に、この記事のトピックは機会のデモンストレーションであり、分析ではないため、今日はこのトピックについて説明しません。 以下は、アプリケーションでJava APIを使用できるパッケージであるjniusを使用してネイティブモーダルダイアログを作成するための概要とコードです。 次のアニメーションは、ネイティブおよびKivyダイアログの呼び出しを示しています。













jniusを使用してネイティブダイアログを作成する
 from kivy.clock import Clock from kivy.event import EventDispatcher from kivy.logger import Logger from functools import partial from jnius import autoclass, PythonJavaClass, java_method, cast from android import activity from android.runnable import run_on_ui_thread Builder = autoclass('android.app.AlertDialog$Builder') String = autoclass('java.lang.String') context = autoclass('org.renpy.android.PythonActivity').mActivity class _OnClickListener(PythonJavaClass): __javainterfaces__ = ['android.content.DialogInterface$OnClickListener',] __javacontext__ = 'app' def __init__(self, action): self.action = action super(_OnClickListener, self).__init__() @java_method('(Landroid/content/DialogInterface;I)V') def onClick(self, dialog, which): self.action() class AndroidDialog(EventDispatcher): __events__ = ('on_dismiss',) def __init__(self, callback, action_name = 'okay', cancel_name = 'cancel', text = 'Are you sure?', title = 'Alert!', **kwargs): self.callback = callback if callback else lambda *args: None self.title = title self.text = text self.action_name = action_name self.cancel_name = cancel_name def answer(self, yesno): self.callback(yesno) @run_on_ui_thread def open(self): builder = self.builder = Builder( cast('android.app.Activity', context)) builder.setMessage(String(self.text)) builder.setTitle(String(self.title)) self.positive = _OnClickListener(partial(self.answer, True)) self.negative = _OnClickListener(partial(self.answer, False)) builder.setPositiveButton(String(self.action_name), self.positive) builder.setNegativeButton(String(self.cancel_name), self.negative) self.dialog = builder.create() self.dialog.show() def dismiss(self): self.dispatch('on_dismiss') def on_dismiss(self): pass #   . from jnius import autoclass, cast from android.runnable import run_on_ui_thread Toast = autoclass('android.widget.Toast') context = autoclass('org.renpy.android.PythonActivity').mActivity @run_on_ui_thread def toast(text, length_long=False): duration = Toast.LENGTH_LONG if length_long else Toast.LENGTH_SHORT String = autoclass('java.lang.String') c = cast('java.lang.CharSequence', String(text)) t = Toast.makeText(context, c, duration) t.show()
      
      





ご覧のとおり、Java APIを使用するには、よく理解する必要があります。 必要に応じて、クラスをJavaで記述し、この方法で使用することもできます。 少なくともKivyのリソースは、最新のモバイルアプリケーションのニーズをカバーしています。







結論として、 VKGroupsアプリケーションの完全なビデオを提供します。









本日のレビューをお楽しみください。 私はもう1年は消えないことを約束し、Kivyフレームワークを使用したアプリケーション開発に関する出版物を少なくとも月に1回は公開するようにします。 コメントでの質問と提案、今後どのような出版物を見たいか、そしてどの問題が人気を集めている素晴らしいKivyフレームワークに関する記事の執筆に役立ち、スピードアップするかについて。







さて、Kivyへの関心が日々高まっているという事実は、

Moscow Pythonは 、2月にモスクワのYandexオフィスで開催されます。 Kaspersky Lab、Sberbank、Yandexの開発者がプレゼンテーションを行います。 彼らはasyncio、Pythonモバイル開発、JupyterHubについて話します。







そして、最も興味深いのは、Vladislav ShashkovがトピックKivy / buildozerを使用したPythonでのモバイルアプリケーションについての講演です。成功への鍵は 、Kivyでモバイルアプリケーションを作成する実際の経験について説明します。 さらに、落とし穴があります-それらについて知っていれば、多くの時間を節約できます。 彼の話は、開発者だけでなく、製品の専門家にとっても興味深いものになります。 彼は自身の経験から、新製品のアイデアはプレゼンテーションやクリック可能なプロトタイプの形で販売されるのではなく、実用的なサービスの形で販売されることを教えてくれます。 Pythonでそれを行うと、迅速かつ効率的になります。







参加は無料ですが、事前に登録する必要があります。 場所の数は限られています。







よろしくお願いします!








All Articles