All Projects → huqinghua → Pyui4win

huqinghua / Pyui4win

Licence: gpl-3.0
一个用python实现业务逻辑、用xml和html/css/js描述界面的windows程序的快速开发框架。该框架将duilib运行时和python运行时结合到一起,实现用xml快速构建界面的同时,利用python及其众多久经考验的库编写业务逻辑,极大地缩短开发周期。

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Pyui4win

Vesper
🍸Vesper - HTTP Framework for Bash Shell
Stars: ✭ 175 (-2.78%)
Mutual labels:  framework
Grab
Web Scraping Framework
Stars: ✭ 2,147 (+1092.78%)
Mutual labels:  framework
Melody
🎶 Minimalist websocket framework for Go
Stars: ✭ 2,303 (+1179.44%)
Mutual labels:  framework
Bee
A framework for IOTA nodes, clients and applications in Rust
Stars: ✭ 176 (-2.22%)
Mutual labels:  framework
School
Sistema de gerenciamento para escola em Laravel com VueJS (Não é mais Angular)
Stars: ✭ 178 (-1.11%)
Mutual labels:  framework
Operatorkit
An opinionated Go framework for developing Kubernetes operators
Stars: ✭ 179 (-0.56%)
Mutual labels:  framework
Sifrr
⚡️ Set of tiny, independent libraries for creating modern and fast webapps with javascript/typescript
Stars: ✭ 174 (-3.33%)
Mutual labels:  framework
Strudel
A front-end framework for the back-end powered web
Stars: ✭ 180 (+0%)
Mutual labels:  framework
Finatra
Fast, testable, Scala services built on TwitterServer and Finagle
Stars: ✭ 2,126 (+1081.11%)
Mutual labels:  framework
Htframework
Unity HTFramework, a rapid development framework of client to the unity.
Stars: ✭ 179 (-0.56%)
Mutual labels:  framework
Xpmjs
微信小程序云端增强 SDK
Stars: ✭ 177 (-1.67%)
Mutual labels:  framework
Buttercake
Material Design Components, Responsive and Modern CSS Framework Built with Flexbox 🍰
Stars: ✭ 178 (-1.11%)
Mutual labels:  framework
Spring Vault
Provides familiar Spring abstractions for HashiCorp Vault
Stars: ✭ 179 (-0.56%)
Mutual labels:  framework
Lumber
Install Forest Admin in minutes.
Stars: ✭ 2,077 (+1053.89%)
Mutual labels:  framework
Veranda
A graph editor framework for Unity
Stars: ✭ 180 (+0%)
Mutual labels:  framework
Fe
前端热门文章阅读
Stars: ✭ 174 (-3.33%)
Mutual labels:  framework
Robot
Native cross-platform system automation
Stars: ✭ 178 (-1.11%)
Mutual labels:  framework
Quasar
An experimental rust-to-{wasm,asmjs} frontend framework.
Stars: ✭ 180 (+0%)
Mutual labels:  framework
Siricontrol System
Control anything with Siri voice commands.
Stars: ✭ 180 (+0%)
Mutual labels:  framework
Blitz
An eBook Framework (CSS + template)
Stars: ✭ 179 (-0.56%)
Mutual labels:  framework

pyui4win

一个用python实现业务逻辑、用xml和html/css/js描述界面的windows程序的快速开发框架。该框架将duilib运行时和python运行时结合到一起,实现用xml快速构建界面的同时,利用python及其众多久经考验的库编写业务逻辑,极大地缩短开发周期。该框架适合非计算密集型客户端产品。

应用框架

1、pyui4win根据xml/html/js/css创建界面
2、Pyui4win接收用户的操作事件,并选择该事件对应的python处理例程
3、该例程在内嵌python引擎中执行
4、Pyui4win将处理结果展示给用户

桥接器原理

1、界面事件和执行器发送过来的消息经过pyui4win运行环境转为pyui4win消息队列中的事件
2、事件分发器从消息队列中获取消息,并根据消息分类派发相应的处理例程
3、如果有对应的python例程处理,那么由python例程处理。否则由缺省C++例程处理

在项目实践中,只需要实现python业务逻辑例程即可

最佳实践(webbrowser版本)

在实践中,发现用html/css/js来实现界面层展现开发效率更高,而且界面效果更酷炫,而且这样界面层和业务层逻辑更清晰。所以推荐html/css/js写界面逻辑,python实现业务逻辑。

1、本地服务为fe提供有状态会话,并可以访问本机系统资源
2、远端服务为fe提供无状态会话,并提供功能服务
3、Fe与本地和远端服务交互,编排各种功能服务,完成业务目标
4、交互采用json格式消息

js和python约定采用json格式来调用。fe暴露一个JsFun4Py函数,供python调用。该函数是js接收python请求的总控制器
python调用js例程:

    msg = {
        'fun': "func1",
        'content': {
            'flag': 'vvvvvvvv'
        }
    }
    self.Browser.CallJs(id(msg))

其中Browser是界面中的ie webbrowser控件,CallJs是pyui4win框架对该控件的方法。


js调用python例程,并获取json格式结果:
    var dd = window.external.InvokePyFun("{\"fun\": \"xxx\", \"param1\": \"yyyyy\", \"param2\":\"zzzzzzzzz\"}")

与js相同,python中也存在一个处理js请求的总控制器消息WM_FROM_JS:
class MainFrame(PyFrameBase):
    def HandleCustomMessageInternal(self, uMsg, wParam, lParam):
        if uMsg == WM_FROM_JS:
            return self._HandleCommandFromJs(wParam)
                
        
    def _HandleCommandFromJs(self, wParam):
        params = PyWinUtils().Conver2string(wParam)
        paramsjson = json.loads(params.decode('gbk'))
        if paramsjson['fun'] == "xxxx":

这种实践中,由于嵌入了ie的webbrowser控件,从而引入了不同ie版本的兼容性问题。为解决这个问题,可以采用以下的electron版本最佳实践

最佳实践(electron版本)

将上文最佳实践中的展现层完全独立出来,用electron来实现展现层,形成本地B/S模式解决方案。其中electron作为fe的容器,类似chrome,负责界面的展现和本地服务、远端服务的编排和调用,实现业务流程。pyui4win作为本地服务,负责本地的业务功能的实现。该服务有一个隐藏的主窗口,目的是创建一个消息泵,来接受和响应electron发送的各种业务请求消息,执行请求的功能,并将结果返回给electron。它们之间采用wm_copydata消息来完成消息的传递,消息的处理也是异步的。和webbrowser版本类似,它们都可以和远端服务交互,调用远端服务的功能

和webbrowser版本相比,这种实践不在依赖ie,没有兼容性问题,不受客户环境上ie版本的限制。

简单界面实践

除了最佳实践,也可以用界面设计器直接配置界面。界面设计器会自动生成界面处理框架代码

Demo

Tamplate下是一个简单界面实践demo。该demo用xml配置界面。
DemoWeb下是pyui4win最佳实践(webbrowser版本)demo。

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].