XPopupによるKivyフレームワークの拡張(パート1)

これらの面白い小さな動物


少し前までは、作業用のGUIアプリケーションプロトタイプを短時間で作成する作業に直面しました。これは、コードを追加しなくてもWindowsとOS Xの両方の良い友だちになります。 また、基本構成には、アプリケーションの実装に必要なすべてのツールがありました。

まあ...ほとんどすべて。 カットの下で、何が間違っているのか、どのようにそれを克服するのかを説明します。

ハリネズミキウイ-自慢の鳥


フレームワークには、ポップアップを実装するための便利なクラスkivy.uix.popup.Popupがあります。 私は彼ができることの詳細には触れません-記事はそれについてではありません。 興味がある場合は、リンクを介してこのクラスとその祖先であるkivy.uix.modalview.ModalViewのドキュメントを読むことができます。

しかし、微妙な違いがあります。 ポップアップウィンドウにテキストメッセージを表示するという些細な作業に直面しているとします。 ポップアップを使用すると、これを非常に簡単に1行で実行できます。

Popup(title='', content=Label(text='  ')).open() 

タスクを少し複雑にしましょう-ポップアップを閉じるボタンをクリックして、ボタンを追加します。

 layout = BoxLayout(orientation="vertical") layout.add_widget(Label(text='  ')) button = Button(text='') layout.add_widget(button) popup = Popup(title='', content=layout) button.bind(on_press=popup.dismiss) popup.open() 

また、軍事的なものは何もありませんが、通常のMessageBoxにはあまり便利ではありませんか?

元デルフィニストとして、私はMessageBoxを 1行で呼び出すという悪い習慣を持っています。 そして、ある世紀に悪い習慣が恩恵を受けました-数杯のコーヒーXPopupシーンに入った後

主なことは、時間内に停止することです


ポップアップメッセージで生活を簡素化するという無害なアイデアは、最終的にパッケージ全体に発展ました。これは、開発チームがフレームワーク拡張パッケージで喜んで絞り出しました。

比較のために、ボタンを使用した上記のタスクは次のように実装されます。

 XNotifyBase(title='  !', text='  ?', buttons=['', ' ', ' ']) 

しかし、順番に行きましょう。 パッケージクラス階層は次のようになります。

ポップアップ


アメニティを作成する


ご注意 この記事では、通知クラス( XNotifyBaseとその子孫)について説明します。 残りのクラスの詳細については、次の記事をご覧ください

XNotificationクラス


タイトルとテキスト付きのポップアップ、ボタンなし。 その機能は、指定された秒数後に自動的に閉じる機能です。

 XNotification(text='    3 ', show_time=3) 

show_timeが指定されていない場合、ウィンドウは.dismiss()メソッドが呼び出されたときにのみ閉じられます。

XMessageクラス


通常のMessageBoxの類似物、つまり タイトル(タイトル)、メッセージ(テキスト)、およびボタン「Ok」のあるウィンドウ。 例:

 XMessage(text=' ', title='') 

標準のボタン署名は、他のものに簡単に変更できます。

 XMessage(text=' ', title='', buttons=['']) 

また、表示されるボタンのセットは単純に置き換えられます。

 XMessage(text=' ', title='', buttons=['', ' ']) 

ボタンのクリックを処理する方法を以下に説明します。

クラスXError


基本的に同じXMessageです。 違いは、このクラスがデフォルトのタイトルを設定することです(つまり、 タイトルは省略できます)。

 XError(text='    ') 

標準ヘッダーが気に入らない-独自に設定してください:

 XError(text='    ', title='-   ...') 

タイトルを常に表示しないようにするには、次の手順を実行します。

 class MyError(XError): buttons = ListProperty(['']) title = StringProperty('-   ...') MyError(text='    ') 

XConfirmationクラス


タイトルが「確認」で、ボタンが「はい」と「いいえ」のポップアップウィンドウ。 このアクションを実行するために、アクションまたは禁止(「いいえ」)の確認(「はい」)をユーザーから受け取る必要がある場合に使用すると便利です。

まず、ダイアログを閉じるイベントのハンドラーが必要です。

 def my_callback(instance): #   XConfirmation,  True,     "Yes" if instance.is_confirmed(): print(' ') else: print(' ') 

ハンドラーの作成後、ポップアップウィンドウを作成できます。

 XConfirmation(text='  .  ?', on_dismiss=my_callback) 

繰り返しますが、標準のボタンは独自のものに置き換えることができます。 ただし、この場合、「はい」ボタンを押すことに焦点を合わせているため、 .is_confirmed()メソッドは動作を停止します。 これは、押されたボタンの名前を格納する.button_pressedプロパティを使用して簡単に解決できます。 ハンドラーに変更を加えます。

 def my_callback(instance): #     XBase if instance.button_pressed == '': print(' ') else: print(' ') 

これで、独自のボタンセットでウィンドウを安全に作成できます。

 XConfirmation( text='  .  ?', on_dismiss=my_callback, buttons=['', '']) 

XProgressクラス


進行状況インジケータと[キャンセル]ボタン(ヘッダーとメッセージが含まれています)を備えたポップアップウィンドウ。 インジケーターを制御するには、次のプロパティを使用します。


例:

 popup = XProgress(value=100, max=1000, text='  ...', title='', buttons=[]) 

このコードは、ボタンなしのポップアップウィンドウを表示し、進行状況の10%を達成します。 進行中のさらなる変更は2つの方法で可能です。

方法1- .valueプロパティを使用:

 #      popup.value = 20 

方法2-.inc()メソッドを使用します。

 #     1  popup.inc() #     10  popup.inc(10) 

.inc()メソッドを使用する特性は、進行状況の最大値に達すると、インジケーターが最大値で停止するのではなく、「ループ」、つまり 進行状況はリセットされ、カウントダウンはゼロから始まります。

例:

 #     90%  popup = XProgress(value=90, text='  ...', title='') #  15 -    5% popup.inc(15) 

この方法は、実行された反復の最大数または回数が事前にわからない場合に使用すると非常に便利です。

.inc()メソッドとともに、 .complete()メソッドが役立ちます。 このメソッドは次のことを行います。


XNotifyBaseクラス


上記のクラスは、すべての場合に十分ではない場合があります。 重要ではありません-XNotifyBaseを基礎として、あなたの心が望むものを何でも描きます。 このクラスは、オブジェクトに次の動作を設定します。


.buttonsプロパティ XBaseの祖先から継承されます 、これについては後で詳しく説明します。

利用可能なプロパティを使用して、独自のワンタイム通知を作成できます。

 XNotifyBase(title='  !', text='  ?', buttons=['', ' ', ' ']) 

または複数の場合:

 class NotifyNewMail(XNotifyBase): buttons = ListProperty(['', ' ', ' ']) title = StringProperty('  !') text = StringProperty('  ?') popup = NotifyNewMail() 

ダイアログを閉じるイベントのハンドラーを記述することは残っています-結果を楽しむことができます。

あとがき


視覚教材(ビデオデモンストレーション)はここにあります
XPopupパッケージをダウンロード- こちら

すべてのコーディングをお楽しみください。

Source: https://habr.com/ru/post/J301712/


All Articles