使用python3/asyncio制作html gui应用程序的简单模块

wu的Python项目详细描述


乌伊

如果您已经制作了一个super python工具,并且您想添加一个gui,但是不使用qt/gtk/tk/wx/kivy/toga:您就在正确的位置!只需将本地浏览器(应用程序模式下的chrome)重新用作gui,由wuy驱动即可。


html/ python

基本上,它是一个python模块,它将充当一个web服务器(http&websocket),并为您打开/管理一个窗口;提供一个简单的框架(js/py3 helpers)

它允许您使用自己的web技能(html/js/css或任何js框架/libs)创建gui,并在服务器端重用python的强大功能。

技术上,它是一个python3模块,使用asyncio和奇妙的aiohttp,以及(如果有的话)全速的uvloop!http服务器在这里提供静态内容(html、js、images…)。websocket是为了简化窗口和服务器之间的通信(同步/异步)。(从客户端到服务器通信的rpc方法,从服务器到客户端或从客户端到客户端通信的pubsub机制)

app/window模式下:它将为您管理(打开/关闭)窗口;使用chrome应用程序模式;如果websocket代理:window&server将关闭(关闭窗口;服务器将关闭,服务器将关闭;窗口将关闭)。您(或您的客户)将不会看到与经典gui的区别!

server模式下:它将充当一个经典的web服务器;您可以从本地主机或其他任何地方使用任意数量的客户端/浏览器关上插座;关上插座;-)。只要提供者服务使用python3,它就可以托管在web上。

More on window/server differences

在所有情况下:使用pyinstaller/windows可以很容易地生成/冻结可执行文件(windows/linux/apple)(一个嵌入了所有html/js的文件)。把你的super python工具分享给全世界(wuy附带its own freezer (a wuy app !))!在未来:安卓!

由于0.6;wuy提供了一个js方法来proxify http requests,以避免cors问题。

由于0.9;wuy在客户端/服务器端提供get/set方法,以便在服务器端的json文件中存储/检索键/值对。

有点,和python eel一样

todos

  • 未来:cefpython3将是在android/iphone上运行wuy应用程序的首选平台(当cefcefpython3准备就绪时)。目前,wuy在linux/windows/apple上与cefpython3一起工作。它在unittests suite中工作(您已经可以尝试;修改wuy.py,用chromeappcef()替换chromeapp())
  • 编写文档和示例

最简单的例子

这里是你好世界wuy

importwuyclasshelloWorld(wuy.Window):""" <button onclick="wuy.beep()">BEEP</button> """size=(100,100)defbeep(self):print("\a BEEP !!!")helloWorld()

测试/运行

下载the zip from here

$ pip3 install aiohttp winreg
$ python3 -u an_app.py

winreg仅适用于Windows)

这是个应用程序!

对于常规服务器示例(来自Web上任何位置的许多客户端)

$ python3 -u a_server.py

使用

安装库:

$ pip3 install wuy winreg

winreg仅适用于Windows)

并遵循official tuto

参见示例

  • an_app:各种技巧
  • an_app2:输入框
  • an_app3:带有自动声明的js vars(可链接窗口)的警报框!
  • an_app4:使用sync&async rpc调用!
  • an_app5:使用async aiohttp.get(从web请求内容)&;全屏模式
  • an_app6:进度条(异步)
  • an_app7:html在docstring中!(最简单的
  • an_app8:只是为了演示在应用程序扩展时如何组织代码。
  • an_appVuejs:使用vuejs应用程序(以及从服务器到客户端的连续推送)
  • a_server:一个服务器,为多个客户机提供服务
  • upload:拖放式上传服务器示例。

别忘了也看看real examples(现实生活中的真正应用)

一个大型的现实应用程序:请看jBrout3(正在开发中),它是旧的py2/gtk应用程序的重生:jBrout2。它使用vuejs/vuex作为前端,使用jbrout的lib来管理照片。

医生

为应用程序使用wuy.Window(用于打开/管理Chrome窗口应用程序)

对经典http/ws服务器使用wuy.Server

以及客户端(javascript),在所有情况下:使用wuy.js

Learn More on differences between this two class

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

推荐PyPI第三方库


热门话题
java应该考虑使用DTO来代替Spring控制器层吗?   java为什么要将Maven与Git结合起来?   java试图将CSV转换为XLSX,但使用了错误的逗号拆分列   mysql Spring 3+Hibernate:java。sql。BatchUpdateException:无法添加或更新子行(ManyToMany)   java基本字符串反转器   java无法使用RestControllerAdvice为身份验证失败生成自定义错误消息   java当只允许SQLException时,如何抛出EOFEException?   java如何创建播放模块?   Android中匿名类的java实例化异常问题   java两个停靠组件,其中第二个组件填充剩余空间   java如何在按钮延迟时启用它   Java中正在运行的应用程序中的后台进程   java我正试图从一个字符串打印出这个字符输出   如何使用java socket通过两个不同的wifi连接两台电脑?   javaapachecamel:如何将分层数据从数据库转换为pojo   java Webrtc:OniconConnectionChange和onConnectionChange之间有什么区别   java如何重写已经创建的JTable方法   爪哇扫雷机堆垛机   雅加达ee Java ee EJB 3.0 Glassfish