Remi — это библиотека графического интерфейса для приложений Python, которая отображается в веб-браузерах. Это позволяет вам получить доступ к вашему интерфейсу локально и удаленно.
Reddit — (субреддит RemiGUI)
Существует также редактор графического интерфейса с возможностью перетаскивания . Откройте подпапку Editor, чтобы загрузить копию.
Показательное видео из великих лабораторий REVVEN
Для стабильной версии:
pip install remi
Для получения самой последней экспериментальной версии Загрузите или ознакомьтесь с Remi с git и установите.
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. Менее чем в 100 Кбайт исходного кода, идеально подходящего для вашей диеты.
Remi позволяет разработчикам создавать независимый от платформы графический интерфейс с помощью Python. Весь графический интерфейс отображается в вашем браузере. HTML не требуется, Remi автоматически переводит ваш код Python в HTML. Когда ваше приложение запускается, оно запускает веб-сервер, который будет доступен в вашей сети.
Базовое приложение выглядит следующим образом:
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-адрес с помощью определенных **kwargs при start
функции. Это будет обсуждаться позже.
Протестировано на Android, Linux, Windows. Полезно на Raspberry Pi для разработки сценариев Python. Он позволяет удаленно взаимодействовать с вашим Raspberry Pi с вашего мобильного устройства.
Зачем еще одна библиотека графического интерфейса? Kivy, PyQT и PyGObject требуют собственного кода для операционной системы хоста, что означает установку или компиляцию больших зависимостей. Remi нужен только веб-браузер, чтобы отобразить ваш графический интерфейс.
Нужно ли мне знать HTML? НЕТ, это не обязательно, вам нужно писать код только на Python.
Это с открытым исходным кодом? Конечно! Remi выпускается под лицензией Apache. Дополнительные сведения см. в файле LICENSE
.
Нужен ли мне какой-то веб-сервер? Нет, оно включено.
Импортируйте библиотеку Remi и некоторые другие полезные вещи.
import remi . gui as gui
from remi import start , App
Подклассифицируйте класс App
и объявите 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 )
Запустите сценарий. Если все в порядке, графический интерфейс автоматически откроется в вашем браузере, в противном случае вам придется ввести в адресную строку «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) регистрирует собственную функцию on_button_pressed в качестве прослушивателя события onclick, предоставляемого виджетом Button. Просто, легко.
Обратные вызовы прослушивателя сначала получат экземпляр эмиттера, а затем все остальные параметры, предоставленные конкретным событием.
Помимо стандартной регистрации событий (как указано выше), в функции прослушивателя можно передавать пользовательские параметры. Этого можно добиться, добавив параметры к вызову функции 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. Библиотека позволяет легко получить доступ к этой информации.
Простой пример: это тот случай, когда вы хотите добавить к виджету текст при наведении. Этого можно достичь с помощью атрибута title тега HTML. Чтобы это сделать:
widget_instance . attributes [ 'title' ] = 'Your title content'
Особым случаем атрибута HTML является стиль . Атрибуты стиля можно изменить следующим образом:
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 и т. д. для создания окна. Устаревшая версия этих библиотек может вызвать проблемы с пользовательским интерфейсом. Если у вас возникли проблемы с пользовательским интерфейсом, обновите эти библиотеки или лучше избегайте автономного выполнения.
Чтобы ограничить удаленный доступ к вашему интерфейсу, вы можете определить имя пользователя и пароль. Он состоит из простого процесса аутентификации. Просто определите параметры имени пользователя и пароля в стартовом вызове:
start ( MyApp , username = 'myusername' , password = 'mypassword' )
Чтобы определить новый стиль для вашего приложения, вам необходимо сделать следующее. Создайте папку res и передайте ее конструктору класса приложения:
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 следует задумать как стандартную среду графического пользовательского интерфейса для настольных компьютеров. Сама библиотека не реализует стратегии безопасности, поэтому рекомендуется не раскрывать ее доступ к небезопасным общедоступным сетям.
При загрузке данных из внешних источников рассмотрите возможность защиты приложения от потенциального внедрения JavaScript, прежде чем напрямую отображать контент.
PySimpleGUI: запущен в 2018 г. Активно развивается и поддерживается. Поддерживает tkinter, Qt, WxPython, Remi (в браузере). Просто создайте собственный макет графического интерфейса. Поддержка Python 2.7 и 3. Более 100 демонстрационных программ и кулинарная книга для быстрого старта. Обширная документация.
Шаблон приложения для REMI: действительно хорошо написанный шаблон для многопросмотровых приложений.
Динамическая реконфигурация через Интернет для роботов ROS
размк
Эспрессо-АРМ
Пипрезенты
Платформа Python Banyan
LightShowPi менеджер шоу
rElectrum: мощный многообещающий менеджер кошелька Electrum для безопасных транзакций.
Здесь перечислены другие реализации этой библиотеки: