Remi は、Web ブラウザーでレンダリングされる Python アプリケーション用の GUI ライブラリです。これにより、ローカルおよびリモートからインターフェイスにアクセスできるようになります。
Reddit - (サブレディット RemiGUI)
ドラッグ アンド ドロップの GUI エディターもあります。 Editor サブフォルダーを参照して、コピーをダウンロードします。
優れた REVVEN ラボからのデモビデオ
安定バージョンの場合:
pip install remi
最新の実験版については、git から Remi をダウンロードまたはチェックアウトしてインストールします。
python setup.py install
または、pip を使用して直接インストールします
pip install git+https://github.com/rawpython/remi.git
次に、テスト スクリプトを開始します (github https://github.com/rawpython/remi/blob/master/examples/widgets_overview_app.py からダウンロードします)。
python widgets_overview_app.py
プラットフォームに依存しない Python GUI ライブラリ。ソースコードは 100 キロバイト未満で、ダイエットに最適です。
Remi を使用すると、開発者は Python を使用してプラットフォームに依存しない GUI を作成できます。 GUI 全体がブラウザに表示されます。 HTML は必要ありません。Remi が Python コードを HTML に自動的に変換します。アプリが起動すると、ネットワーク上でアクセスできる Web サーバーが起動します。
基本的なアプリケーションは次のようになります。
import remi . gui as gui
from remi import start , App
class MyApp ( App ):
def __init__ ( self , * args ):
super ( MyApp , self ). __init__ ( * args )
def main ( self ):
container = gui . VBox ( width = 120 , height = 100 )
self . lbl = gui . Label ( 'Hello world!' )
self . bt = gui . Button ( 'Press me!' )
# setting the listener for the onclick event of the button
self . bt . onclick . do ( self . on_button_pressed )
# appending a widget to another, the first argument is a string key
container . append ( self . lbl )
container . append ( self . bt )
# returning the root widget
return container
# listener function
def on_button_pressed ( self , widget ):
self . lbl . set_text ( 'Button pressed!' )
self . bt . set_text ( 'Hi!' )
# starts the web server
start ( MyApp , port = 8081 )
ユーザー インターフェイスを表示するには、お好みのブラウザを開いて「http://127.0.0.1:8081」と入力します。 URL アドレスは、 start
関数呼び出し時に特定の **kwargs によって変更できます。これについては後で説明します。
Android、Linux、Windows でテスト済み。 Raspberry Pi での Python スクリプト開発に役立ちます。これにより、モバイル デバイスから Raspberry Pi とリモートで対話できるようになります。
なぜ別の GUI ライブラリが必要なのでしょうか? Kivy、PyQT、および PyGObject はすべて、ホスト オペレーティング システムのネイティブ コードを必要とします。これは、大規模な依存関係をインストールまたはコンパイルすることを意味します。 Remi に必要なのは、GUI を表示するために Web ブラウザだけです。
HTML の知識が必要ですか?いいえ、必須ではありません。コーディングは Python のみで行う必要があります。
オープンソースですか?確かに! Remi は Apache ライセンスに基づいてリリースされています。詳細については、 LICENSE
ファイルを参照してください。
何らかの Web サーバーが必要ですか?いいえ、含まれています。
Remi ライブラリとその他の便利なものをインポートします。
import remi . gui as gui
from remi import start , App
App
クラスをサブクラス化し、アプリケーションのエントリ ポイントとなるmain
関数を宣言します。 main 関数内でルート ウィジェットreturn
必要があります。
class MyApp ( App ):
def __init__ ( self , * args ):
super ( MyApp , self ). __init__ ( * args )
def main ( self ):
lbl = gui . Label ( "Hello world!" , width = 100 , height = 30 )
# return of the root widget
return lbl
メイン クラスの外側で、関数start
を呼び出し、前に宣言したクラスの名前をパラメーターとして渡して、アプリケーションを開始します。
# starts the webserver
start ( MyApp , port = 8081 )
スクリプトを実行します。問題がなければ、ブラウザで GUI が自動的に開きます。それ以外の場合は、アドレス バーに「http://127.0.0.1:8081」と入力する必要があります。
次のように、 start
呼び出しでオプションのパラメータをカスタマイズできます。
start ( MyApp , address = '127.0.0.1' , port = 8081 , multiple_instance = False , enable_file_cache = True , update_interval = 0.1 , start_browser = True )
パラメータ:
追加パラメータ:
すべてのウィジェット コンストラクターは、次の 2 つの標準 **kwargs を受け入れます。
ウィジェットは、ユーザーの操作中に発生する一連のイベントを公開します。このようなイベントは、アプリケーションの動作を定義する便利な方法です。各ウィジェットには、許可されるユーザー操作のタイプに応じて、独自のコールバックがあります。ウィジェットの具体的なコールバックについては後で説明します。
関数をイベント リスナーとして登録するには、eventname.do (つまり、onclick.do) のような関数を呼び出して、イベントを管理するコールバックをパラメーターとして渡す必要があります。以下に例を示します。
import remi . gui as gui
from remi import start , App
class MyApp ( App ):
def __init__ ( self , * args ):
super ( MyApp , self ). __init__ ( * args )
def main ( self ):
container = gui . VBox ( width = 120 , height = 100 )
self . lbl = gui . Label ( 'Hello world!' )
self . bt = gui . Button ( 'Press me!' )
# setting the listener for the onclick event of the button
self . bt . onclick . do ( self . on_button_pressed )
# appending a widget to another, the first argument is a string key
container . append ( self . lbl )
container . append ( self . bt )
# returning the root widget
return container
# listener function
def on_button_pressed ( self , widget ):
self . lbl . set_text ( 'Button pressed!' )
self . bt . set_text ( 'Hi!' )
# starts the web server
start ( MyApp )
示されている例では、 self.bt.onclick.do(self.on_button_pressed)は、ボタン ウィジェットによって公開されるイベントonclickのリスナーとして self のon_button_pressed関数を登録します。シンプル、簡単。
リスナーのコールバックは、最初にエミッターのインスタンスを受け取り、次に特定のイベントによって提供される他のすべてのパラメーターを受け取ります。
標準のイベント登録 (前述のとおり) に加えて、ユーザー パラメーターをリスナー関数に渡すことができます。これにより、 do関数呼び出しにパラメーターを追加できます。
import remi . gui as gui
from remi import start , App
class MyApp ( App ):
def __init__ ( self , * args ):
super ( MyApp , self ). __init__ ( * args )
def main ( self ):
container = gui . VBox ( width = 120 , height = 100 )
self . lbl = gui . Label ( 'Hello world!' )
self . bt = gui . Button ( 'Hello name!' )
self . bt2 = gui . Button ( 'Hello name surname!' )
# setting the listener for the onclick event of the buttons
self . bt . onclick . do ( self . on_button_pressed , "Name" )
self . bt2 . onclick . do ( self . on_button_pressed , "Name" , "Surname" )
# appending a widget to another
container . append ( self . lbl )
container . append ( self . bt )
container . append ( self . bt2 )
# returning the root widget
return container
# listener function
def on_button_pressed ( self , widget , name = '' , surname = '' ):
self . lbl . set_text ( 'Button pressed!' )
widget . set_text ( 'Hello ' + name + ' ' + surname )
# starts the web server
start ( MyApp )
これにより、同じイベント リスナー定義で異なる動作を実現できる優れた柔軟性が可能になります。
場合によっては、HTML 属性を操作するためにウィジェットの HTML 表現にアクセスする必要があります。ライブラリを使用すると、この情報に簡単にアクセスできます。
簡単な例: ウィジェットにホバー テキストを追加したい場合です。これは、HTML タグのtitle属性によって実現できます。これを行うには:
widget_instance . attributes [ 'title' ] = 'Your title content'
HTML 属性の特殊なケースはstyleです。スタイル属性は次の方法で変更できます。
widget_instance . style [ 'color' ] = 'red'
新しい属性を割り当てると、自動的に作成されます。
HTML 属性のリファレンス リストについては、https://www.w3schools.com/tags/ref_attributes.asp を参照してください。
スタイル属性のリファレンス リストについては、https://www.w3schools.com/cssref/default.asp を参照してください。
内部的に使用される属性に注意してください。これらは:
REMI アプリをリモートで、DNS を使用し、ファイアウォールの内側で使用している場合は、 start
呼び出しで特別なパラメーターを指定できます。
start ( MyApp , address = '0.0.0.0' , port = 8081 )
ブラウザを標準インターフェイス ウィンドウとして使用することをお勧めします。
ただし、ブラウザの使用を避けることもできます。これは、REMI と PyWebView を結合するだけで簡単に取得できます。このstandalone_app.pyに関する例を次に示します。
PyWebView はウィンドウの作成に qt、gtk などを使用することに注意してください。これらのライブラリのバージョンが古いと、UI の問題が発生する可能性があります。 UI の問題が発生した場合は、これらのライブラリを更新するか、スタンドアロンでの実行を避けてください。
インターフェイスへのリモート アクセスを制限するために、ユーザー名とパスワードを定義できます。これは、単純な認証プロセスで構成されます。開始呼び出しでパラメータのユーザー名とパスワードを定義するだけです。
start ( MyApp , username = 'myusername' , password = 'mypassword' )
アプリの新しいスタイルを定義するには、次のことを行う必要があります。 resフォルダーを作成し、それを App クラスのコンストラクターに渡します。
class MyApp ( App ):
def __init__ ( self , * args ):
res_path = os . path . join ( os . path . dirname ( __file__ ), 'res' )
super ( MyApp , self ). __init__ ( * args , static_file_path = { 'res' : res_path })
標準の style.css ファイルを remi フォルダーからコピーし、 resフォルダー内に貼り付けます。カスタマイズするには編集してください。このようにして、標準のstyle.cssファイルは、作成したファイルによってオーバーライドされます。
RemiはPython2.7からPython3.Xまで互換性を持たせて作られています。互換性の問題をお知らせください。
Remi は、標準のデスクトップ GUI フレームワークとして意図されている必要があります。ライブラリ自体はセキュリティ戦略を実装していないため、安全でないパブリック ネットワークへのアクセスを公開しないことをお勧めします。
外部ソースからデータをロードする場合は、コンテンツを直接表示する前に、潜在的な JavaScript インジェクションからアプリケーションを保護することを検討してください。
PySimpleGUI: 2018 年にリリースされ、積極的に開発およびサポートされています。 tkinter、Qt、WxPython、Remi (ブラウザ内) をサポートします。カスタム レイアウト GUI を簡単に作成します。 Python 2.7 および 3 のサポート。 100 を超えるデモ プログラムとクックブックですぐに始められます。豊富なドキュメント。
REMI 用アプリ テンプレート: マルチビュー アプリケーション用に非常によく書かれたテンプレートです。
ROS ロボットの Web ベースの動的再構成
ラズムク
エスプレッソ-ARM
パイプレゼント
Python Banyan フレームワーク
LightShowPi ショーマネージャー
rElectrum: 安全な取引のための強力で有望な Electrum ウォレット マネージャー。
このライブラリの他の実装を次に示します。