Remi 是用於在 Web 瀏覽器中呈現的 Python 應用程式的 GUI 函式庫。這允許您本地和遠端存取您的介面。
Reddit -(Reddit 子版 RemiGUI)
還有一個拖放 GUI 編輯器。查看編輯器子資料夾以下載您的副本。
來自偉大的 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 KB,非常適合您的飲食。
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」。您可以在start
函數呼叫時透過特定的 **kwargs 來變更 URL 位址。這將在稍後討論。
在 Android、Linux、Windows 上進行了測試。在 Raspberry Pi 上用於 Python 腳本開發很有用。它允許從您的行動裝置遠端與您的 Raspberry Pi 互動。
為什麼還要另一個 GUI 函式庫? Kivy、PyQT 和 PyGObject 都需要主機作業系統的本機程式碼,這意味著安裝或編譯大量相依性。 Remi 只需要一個網頁瀏覽器即可顯示您的 GUI。
我需要了解 HTML 嗎?不,這不是必需的,您只需使用 Python 進行編碼。
它是開源的嗎?一定! Remi 是根據 Apache 許可證發布的。有關更多詳細信息,請參閱LICENSE
文件。
我需要某種網頁伺服器嗎?不,它已包含在內。
導入 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 )
參數:
附加參數:
所有小部件構造函數都接受兩個標準**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)將 self 的on_button_pressed函數註冊為 Button 小部件公開的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 ( '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 )
這提供了極大的靈活性,可以使用相同的事件偵聽器定義來獲得不同的行為。
有時需要存取 Widget 的 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
注意內部使用的屬性。這些都是:
如果您透過 DNS 並在防火牆後面遠端使用 REMI 應用程序,則可以在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 })
從 remi 資料夾複製標準 style.css 檔案並將其貼上到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
Pi禮物
Python Banyan 框架
LightShowPi 演出管理器
rElectrum:一個功能強大、前景廣闊的 Electrum 錢包管理器,可實現安全交易。
這裡列出了該庫的其他實作: