Remi adalah perpustakaan GUI untuk aplikasi Python yang dirender di browser web. Ini memungkinkan Anda mengakses antarmuka Anda secara lokal dan jarak jauh.
Reddit - (subreddit RemiGUI)
Ada juga Editor GUI drag n drop . Lihat subfolder Editor untuk mengunduh salinan Anda.
Video demonstratif dari laboratorium REVVEN yang hebat
Untuk versi stabil :
pip install remi
Untuk versi eksperimental terbaru Unduh atau periksa Remi dari git dan instal
python setup.py install
atau instal langsung menggunakan pip
pip install git+https://github.com/rawpython/remi.git
Kemudian mulai skrip pengujian (unduh dari github https://github.com/rawpython/remi/blob/master/examples/widgets_overview_app.py):
python widgets_overview_app.py
Pustaka GUI Python independen platform. Dalam kode sumber kurang dari 100 Kbytes, cocok untuk diet Anda.
Remi memungkinkan pengembang membuat GUI platform independen dengan Python. Seluruh GUI ditampilkan di browser Anda. Tidak diperlukan HTML , Remi secara otomatis menerjemahkan kode Python Anda ke HTML. Saat aplikasi Anda dimulai, server web akan dimulai yang dapat diakses di jaringan Anda.
Aplikasi dasar muncul seperti ini:
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 )
Untuk melihat antarmuka pengguna, buka browser pilihan Anda dan ketik "http://127.0.0.1:8081". Anda dapat mengubah alamat URL dengan **kwarg tertentu saat start
panggilan fungsi. Ini akan dibahas nanti.
Diuji di Android, Linux, Windows. Berguna di Raspberry Pi untuk pengembangan skrip Python. Ini memungkinkan interaksi dengan Raspberry Pi Anda dari jarak jauh dari perangkat seluler Anda.
Mengapa lib GUI lain? Kivy, PyQT, dan PyGObject semuanya memerlukan kode asli untuk sistem operasi host, yang berarti menginstal atau mengkompilasi dependensi besar. Remi hanya membutuhkan browser web untuk menampilkan GUI Anda.
Apakah saya perlu tahu HTML? TIDAK, Ini tidak wajib, Anda hanya perlu membuat kode dengan Python.
Apakah ini sumber terbuka? Untuk ya! Remi dirilis di bawah Lisensi Apache. Lihat file LICENSE
untuk lebih jelasnya.
Apakah saya memerlukan semacam server web? Tidak, itu sudah termasuk.
Impor perpustakaan Remi dan beberapa hal berguna lainnya.
import remi . gui as gui
from remi import start , App
Subkelaskan kelas App
dan deklarasikan fungsi main
yang akan menjadi titik masuk aplikasi. Di dalam fungsi utama Anda harus return
widget root.
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
Di luar kelas utama, jalankan aplikasi dengan memanggil fungsi start
dan meneruskan nama kelas yang Anda deklarasikan sebelumnya sebagai parameter:
# starts the webserver
start ( MyApp , port = 8081 )
Jalankan skripnya. Jika semuanya OK, GUI akan terbuka secara otomatis di browser Anda, jika tidak, Anda harus mengetikkan di bilah alamat "http://127.0.0.1:8081".
Anda dapat menyesuaikan parameter opsional di panggilan start
seperti:
start ( MyApp , address = '127.0.0.1' , port = 8081 , multiple_instance = False , enable_file_cache = True , update_interval = 0.1 , start_browser = True )
Parameter:
Parameter Tambahan:
Semua konstruktor widget menerima dua standar**kwargs yaitu:
Widget memaparkan serangkaian peristiwa yang terjadi selama interaksi pengguna. Peristiwa seperti itu adalah cara mudah untuk menentukan perilaku aplikasi. Setiap widget memiliki callbacknya sendiri, bergantung pada jenis interaksi pengguna yang diizinkan. Callback spesifik untuk widget akan diilustrasikan nanti.
Untuk mendaftarkan suatu fungsi sebagai pendengar peristiwa, Anda harus memanggil fungsi seperti nama peristiwa.do (yaitu onclick.do) dengan meneruskan panggilan balik sebagai parameter yang akan mengelola peristiwa tersebut. Berikut contohnya:
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 )
Dalam contoh yang ditampilkan self.bt.onclick.do(self.on_button_pressed) mendaftarkan fungsi on_button_pressed self sebagai pendengar untuk acara onclick yang diekspos oleh widget Button. Sederhana, mudah.
Callback pendengar akan menerima instance emitor terlebih dahulu, lalu semua parameter lain yang disediakan oleh peristiwa tertentu.
Selain registrasi peristiwa standar (seperti yang disebutkan di atas), parameter pengguna juga dapat diteruskan ke fungsi pendengar. Hal ini dapat dicapai dengan menambahkan parameter ke pemanggilan fungsi 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 )
Hal ini memungkinkan fleksibilitas yang besar, mendapatkan perilaku yang berbeda dengan definisi pendengar peristiwa yang sama.
Terkadang diperlukan untuk mengakses representasi HTML Widget untuk memanipulasi atribut HTML. Perpustakaan memungkinkan mengakses informasi ini dengan mudah.
Contoh sederhana: Ini adalah kasus di mana Anda ingin menambahkan teks hover ke widget. Hal ini dapat dicapai dengan atribut title dari tag HTML. Untuk melakukan ini:
widget_instance . attributes [ 'title' ] = 'Your title content'
Kasus khusus dari atribut HTML adalah style . Atribut gaya dapat diubah dengan cara ini:
widget_instance . style [ 'color' ] = 'red'
Penetapan atribut baru secara otomatis membuatnya.
Untuk daftar referensi atribut HTML, Anda dapat merujuk ke https://www.w3schools.com/tags/ref_attributes.asp
Untuk daftar referensi atribut gaya, Anda dapat merujuk ke https://www.w3schools.com/cssref/default.asp
Berhati-hatilah dengan atribut yang digunakan secara internal. Ini adalah:
Jika Anda menggunakan aplikasi REMI dari jarak jauh, dengan DNS dan di belakang firewall, Anda dapat menentukan parameter khusus di panggilan start
:
start ( MyApp , address = '0.0.0.0' , port = 8081 )
Saya sarankan menggunakan browser sebagai jendela antarmuka standar.
Namun, Anda bisa menghindari penggunaan browser. Ini dapat diperoleh dengan mudah dengan bergabung dengan REMI dan PyWebView. Berikut adalah contoh tentang standalone_app.py ini.
Ketahuilah bahwa PyWebView menggunakan qt, gtk, dan seterusnya untuk membuat jendela. Versi perpustakaan yang ketinggalan jaman dapat menyebabkan masalah UI. Jika Anda mengalami masalah UI, perbarui pustaka ini, atau lebih baik hindari eksekusi mandiri.
Untuk membatasi akses jarak jauh ke antarmuka Anda, Anda dapat menentukan nama pengguna dan kata sandi. Ini terdiri dari proses otentikasi sederhana. Cukup tentukan parameter nama pengguna dan kata sandi di panggilan awal:
start ( MyApp , username = 'myusername' , password = 'mypassword' )
Untuk menentukan gaya baru untuk aplikasi Anda, Anda harus melakukan hal berikut. Buat folder res dan teruskan ke konstruktor kelas Aplikasi Anda:
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 })
Salin file style.css standar dari folder remi dan tempel di dalam folder res Anda. Edit untuk menyesuaikan. Dengan cara ini file style.css standar akan ditimpa oleh file yang Anda buat.
Remi dibuat agar kompatibel dari Python2.7 hingga Python3.X. Harap beri tahu masalah kompatibilitas.
Remi harus dimaksudkan sebagai kerangka GUI desktop standar. Perpustakaan itu sendiri tidak menerapkan strategi keamanan, sehingga disarankan untuk tidak memaparkan aksesnya ke jaringan publik yang tidak aman.
Saat memuat data dari sumber eksternal, pertimbangkan untuk melindungi aplikasi dari potensi injeksi javascript sebelum menampilkan konten secara langsung.
PySimpleGUI: Diluncurkan pada tahun 2018 Dikembangkan dan didukung secara aktif. Mendukung tkinter, Qt, WxPython, Remi (di browser). Buat GUI tata letak khusus dengan mudah. Dukungan Python 2.7 & 3. 100+ program Demo & Buku Masak untuk memulai dengan cepat. Dokumentasi yang luas.
Templat Aplikasi Untuk REMI: Templat yang ditulis dengan sangat baik untuk aplikasi multiview.
Konfigurasi ulang dinamis berbasis web untuk robot ROS
razmq
Espresso-ARM
Hadiah Pi
Kerangka Python Beringin
Manajer pertunjukan LightShowPi
rElectrum: Manajer dompet Electrum yang kuat dan menjanjikan untuk transaksi yang aman.
Berikut adalah implementasi lain dari perpustakaan ini: