python远程接口库

remi的Python项目详细描述


用于应用程序的独立于平台的python gui库

remi是一个用于python应用程序的gui库,它将应用程序的接口转换成html并在web浏览器中呈现。这消除了特定于平台的依赖关系,让您可以轻松地在python中开发跨平台应用程序!

你需要支持吗?联系方式:

reddit-(subreddit remigui)

您要快速概述吗?这是一个在线示例,感谢强大的repl.it

repl.it的现场示例

还有一个拖放式gui编辑器。请查看编辑子文件夹以下载您的副本,或首先在:

在repl.it上实时尝试gui编辑器概述

更改日志

2019年4月1日

事件侦听器注册现在可以通过do指令而不是connect来完成(出于兼容性原因,该指令保持可用)。 即

mybutton.onclick.do(myevent_listener)

较旧的更改

当前分支包括有关资源文件处理的改进。 应用程序构造函数接受静态文件路径参数。它的值必须是字典,其中的元素表示命名的资源路径。

super(MyApp,self).__init__(*args,static_file_path={'my_resources':'./files/resources/','my_other_res':'./other/'})

要处理特定的资源,用户必须指定资源文件夹键,并将其以'/key:'格式添加到文件名之前。 即

my_widget.attributes['background-image']="url('/my_resources:image.png')"

接受子文件夹,因此:

my_widget.attributes['background-image']="url('/my_resources:subfolder/other_subfolder/image.png')"

不再支持事件textinput.onenter。

事件textinput.onkeydown和textinput.onkeydup现在不同,需要不同的侦听器格式。还有一个附加的参数键码。

如果TEXTINPUT是单行的,则按下回车键时也会发生TEXTINPUT.onchange事件。

入门

对于稳定的版本:

pip install remi

对于最新的实验版本下载或从git签出remi并安装

python setup.py install

或直接使用pip安装

pip install git+https://github.com/dddomodossola/remi.git

然后启动测试脚本:

python widgets_overview_app.py

remi

独立于平台的python gui库。不到100千字节的源代码,非常适合您的饮食。

remi使开发人员能够使用python创建独立于平台的gui。整个gui被转换成html并在浏览器中呈现。不需要html,remi会自动将python代码转换为html。当您的应用程序启动时,它会启动一个可在您的网络上访问的Web服务器。

基本应用程序如下:

importremi.guiasguifromremiimportstart,AppclassMyApp(App):def__init__(self,*args):super(MyApp,self).__init__(*args)defmain(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 buttonself.bt.onclick.do(self.on_button_pressed)# appending a widget to another, the first argument is a string keycontainer.append(self.lbl)container.append(self.bt)# returning the root widgetreturncontainer# listener functiondefon_button_pressed(self,widget):self.lbl.set_text('Button pressed!')self.bt.set_text('Hi!')# starts the web serverstart(MyApp)

要查看用户界面,请打开首选浏览器并键入"http://127.0.0.1:8081"。 您可以在start函数调用处通过特定的**kwargs更改url地址。这将在稍后讨论。

在Android、Linux、Windows上测试。 用于python脚本开发的覆盆子pi皮特。它允许从移动设备远程与您的覆盆子皮进行交互。

< H1> FAQ
  • 为什么要使用另一个gui库?< /强> kivy、pyqt和pygobject都需要主机操作系统的本机代码,这意味着安装或编译大型依赖项。REMI只需要一个Web浏览器来显示您的图形用户界面。

  • 我需要知道html吗?< /强> 不,这不是必需的,您只能用python编写代码。

  • 我可以使用哪些浏览器?< /强> 在chrome firefox和edge(在windows、linux和android上)上测试过,但没有在其他地方测试过。不过,它在其他地方可能会工作得很好!

  • 它是开源的吗?< /强> 当然!remi是在apache许可下发布的。有关详细信息,请参见许可证文件。

  • 我需要某种网络服务器吗?< /强> 不,包括在内。

简要教程

导入REMI库和其他一些有用的东西。

mybutton.onclick.do(myevent_listener)
0

子类化app类并声明一个main函数,该函数将成为应用程序的入口点。在主函数中,必须返回根小部件。

mybutton.onclick.do(myevent_listener)
1

在主类之外启动应用程序,调用函数start作为参数传递您先前声明的类的名称。

mybutton.onclick.do(myevent_listener)
2

运行脚本。如果一切正常,图形用户界面将在浏览器中自动打开,否则,您必须在地址栏中键入http://127.0.0.1:8081 rel="nofollow">http://127.0.0.1:8081。

您可以在startcall like中自定义可选参数。

mybutton.onclick.do(myevent_listener)
3

参数:

  • 地址:网络接口IP
  • 端口:侦听端口
  • 多个实例:布尔值,如果为真,则连接到脚本的多个客户端具有不同的应用实例(由唯一的cookie会话标识符标识)
  • 启用文件缓存:布尔值,如果为真,则启用资源缓存
  • 更新间隔:以秒为单位的gui更新间隔。如果为零,则每次更改时都会进行更新。如果为零,则不调用app.idle方法。
  • start_browser:布尔值,定义是否应在启动时自动打开浏览器
  • standalone:boolean,指示在何处将应用程序作为具有自己窗口的标准桌面应用程序运行。如果为False,界面将显示在浏览器网页中。

附加参数:

  • 用户名:用于基本的http身份验证
  • 密码:用于基本的http身份验证
  • certfile:ssl证书文件名
  • 密钥文件:ssl密钥文件
  • ssl_版本:身份验证版本(即ssl.protocol_tlsv1_2)。如果没有,则禁用SSL加密

所有widgets构造函数都接受两个标准**kwargs,它们是:

  • 宽度:可以表示为int(并解释为像素)或str(您可以指定测量单位,如"10%")
  • 高度:可以表示为int(并解释为像素)或str(您可以指定测量单位,如"10%")

事件和回调

小部件公开在用户交互期间发生的一组事件。 这样的事件是定义应用程序行为的方便方法。 每个小部件都有自己的回调,这取决于它允许的用户交互类型。 小部件的特定回调将在稍后演示。

要将函数注册为事件侦听器,必须调用eventname.do(即onclick.do)这样的函数,并将管理事件的回调作为参数传递。 下面是一个示例:

importremi.guiasguifromremiimportstart,AppclassMyApp(App):def__init__(self,*args):super(MyApp,self).__init__(*args)defmain(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 buttonself.bt.onclick.do(self.on_button_pressed)# appending a widget to another, the first argument is a string keycontainer.append(self.lbl)container.append(self.bt)# returning the root widgetreturncontainer# listener functiondefon_button_pressed(self,widget):self.lbl.set_text('Button pressed!')self.bt.set_text('Hi!')# starts the web serverstart(MyApp)

在所示示例中,self.bt.onclick.do(self.on_button_pressed)将self的on_button_pressed函数注册为按钮小部件所显示的事件onclick的侦听器。 简单,容易。

侦听器的回调将首先接收发射器的实例,然后再接收所有r特定事件提供的参数。

除了标准的事件注册(如上所述),还可以将用户参数传递给侦听器函数。这可以实现将参数附加到do函数调用。

mybutton.onclick.do(myevent_listener)
5

这允许极大的灵活性,使用相同的事件侦听器定义获得不同的行为。

HTML属性可访问性

有时可能需要访问小部件的html表示来操作html属性。 库允许轻松访问此信息。

一个简单的例子:在这种情况下,您希望向小部件添加悬停文本。这可以通过html标记的title属性来实现。 为此:

mybutton.onclick.do(myevent_listener)
6

html属性的一个特殊情况是样式。 可以通过以下方式更改样式属性:

mybutton.onclick.do(myevent_listener)
7

新属性的赋值会自动创建它。

有关HTML属性的参考列表,请参阅https://www.w3schools.com/tags/ref_attributes.asp

有关样式属性的参考列表,请参阅https://www.w3schools.com/cssref/default.asp" rel="nofollow">https://www.w3schools.com/cssref/default.asp

注意内部使用的属性。这些是:

  • :它用于存储用于样式设置的小部件类名
  • id:用于存储小部件的实例id以进行回调管理

远程访问

如果您正在远程使用REMI应用程序,使用DNS并在防火墙后,您可以在开始调用中指定特殊参数:

  • 端口:http服务器端口。别忘了在路由器上设置这个端口;
mybutton.onclick.do(myevent_listener)
8

独立执行

我建议使用浏览器作为标准界面窗口。

但是,您可以避免使用浏览器。 这可以通过加入remi和pywebview来获得。 这里有一个关于这个的例子standalone_app.py

请注意,pywebview使用qt、gtk等创建窗口。这些库的过时版本可能会导致用户界面问题。如果遇到用户界面问题,请更新这些库,或更好地避免独立执行。

认证

为了限制对界面的远程访问,可以定义用户名和密码。它由一个简单的身份验证过程组成。 只需在开始调用中定义参数usernamepassword

mybutton.onclick.do(myevent_listener)
9

造型

要为应用程序定义新样式,必须执行以下操作。 创建res文件夹并将其传递给应用程序类构造函数:

super(MyApp,self).__init__(*args,static_file_path={'my_resources':'./files/resources/','my_other_res':'./other/'})
0

复制remi文件夹中的standard style.css并将其粘贴到res文件夹中。编辑它以便自定义。 这样,标准的style.css文件将被您创建的文件覆盖。

兼容性

REMI与python2.7和python3.x兼容。请通知兼容性问题。

安全性

remi应该是一个标准的桌面gui框架。 图书馆本身没有实施安全策略,因此建议不要将其访问暴露在不安全的公共网络中。

从外部源加载数据时,在直接显示内容之前,请考虑保护应用程序免受潜在的javascript注入。

支持项目

你能支持REMI项目吗?< /P>

你知道雷米在帕特伦吗? 这是支持这个项目的一个绝妙方法。

立即支持REMI

另外,也欢迎少量购买。

贡献者

感谢您与我们合作,使雷米更好!

开源的真正力量在于贡献者。请随意参与本项目,并考虑将自己添加到以下列表中。 是的,我知道github已经提供了一个贡献者列表,但我觉得我必须提到谁提供了帮助。

戴维德·罗莎

约翰·斯托沃斯

claudio cannat

sam pfeiffer

肯·汤普森

paarth tandon

ally weir

蒂莫西·赛勒斯

约翰·亨特·鲍恩

马丁·斯帕索夫

惠灵顿卡斯特罗酒店

purporc

ttufts

chris braun

艾伦•约林克斯

bernhard e.reiter

saewoonam

使用REMI的项目

基于Web的ROS机器人动态重新配置

razmq

意式咖啡臂

pipresents

python banyan框架

lightshowpi显示管理器

其他实现

下面列出了此库的其他实现:

    > CREMI< /A>:(WIP)由HRFF ="HTTPS://Github. COM/CyrPro 4"Re="NoFoLoLy">克劳迪奥CANAT AT 开发。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java安卓,如何从一个私有的内部类更新视图元素,这个类是一个异步任务   如果代码中没有数字,则返回true的java方法   java是否将liferay service builder数据放入api?   java如何在javafx中显示单元格中的字符串数组   javascript如何从另一个GUI类获取变量?   创建多个对象后的java REST API POST响应?   java中静态块中声明的变量的范围是什么?   jsp Java,Spring MVC,从服务器中提取任何类型的文件(.png,.jpg,.pdf,.doc等)并提供给用户下载的最简单方法?   java应用程序运行在其他应用程序之上   java正则表达式匹配字符串是否应包含“;”特定字符串前后   C++的java原生源代码。awt。机器人   用于访问/共享单个目录的java多个Xodus应用程序   java将方法传递给另一个活动   java如何获取Struts 2中XWWWForMurlen编码的contenttype的参数