轻松构建MVP PyQt5应用
大家好,我创建了一个 python 包来轻松构建一个 MVP PyQt5 应用程序。我将把项目的 README.md 的内容留在这里。
您可以在此处查看源代码。
你可以在pypi中找到这个包。
说明
easy_mvp 是一个可以轻松构建桌面应用程序的软件包
使用 MVP 模式、Python 和 PyQt5。这是通过使用
一组类似于 Android 框架 中使用的类和实践。
这个包背后的基本思想是从
另一个演示者并且新的演示者填充窗口
完全的。这类似于 Android 应用程序,其中
当打开一个新的Activity时,他们用新的替换旧的。
如果按下后退按钮,则删除新的 Activity
旧的重新出现在屏幕上。这给人的印象
有一个堆栈的活动。
此外,easy_mvp 提供了在超过
一个窗口**,因为桌面应用程序与 Android 应用程序非常不同。
安装
要安装此软件包,您需要在系统中安装 Python。
然后你可以运行这个命令来安装这个包:
pip install easy_mvp
进入全屏模式 退出全屏模式
解释机制
以下解释反映在demo.py程序中。
easy_mvp创建的应用模型是这样的:
[
](https://res.cloudinary.com/practicaldev/image/fetch/s--in17CETx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github. com/R0land013/easy-mvp/blob/master/readme_img/app_manager_and_windows.png%3Fraw%3Dtrue)
ApplicationManager 类是程序的入口点。这个
类是知道窗口、创建它们并销毁它们的类。每个
窗口包含一个演示者堆栈。这样就实现了
与 Android 应用程序具有相同的行为。班级
Intent 用于从一位演示者到另一位演示者的过渡,
无论新演示者是否在新窗口中启动。
窗口的行为表示如下:
[
](https://res.cloudinary.com/practicaldev/image/fetch/s--6vSFrhzX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https:// github.com/R0land013/easy-mvp/blob/b2c8ba51e5315679848925967611e1e5931871dd/readme_img/window_with_its_internal_stack.png%3Fraw%3Dtrue)
如您所见,窗口有一堆演示者,
它们依附于他们的观点,因此**所有
演示者必须拥有观点**。我们再次可以看到该类
Intent 是允许添加新的一对演示者视图
到窗口堆栈。为了使这种机制起作用,演示者
类必须继承自 AbstractPresenter 类。
AbstractPresenter 有几种方法可以打开新的演示者,
关闭当前演示者并处理
应用程序,例如当将要初始化、隐藏演示者时,
或关闭。
从 AbstractPresenter 继承的类中的事件流是这样的:
[
](https://res.cloudinary.com/practicaldev/image/fetch/s--dDcgEQxD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/R0land013 /easy-mvp/blob/b2c8ba51e5315679848925967611e1e5931871dd/readme_img/flow_of_calls_on_presenter.png%3Fraw%3Dtrue)
_on_ initialize 方法是Abstract Presenter 类中调用的第一个方法。
这里必须初始化presenter的实例变量。你也必须
创建与演示者对应的视图实例。创建后,
视图实例必须使用 _set_view(view) 方法设置,来自
这样,easy_mvp 环境中的其他类就可以访问该视图。
视图可以通过 AbstractPresenter 的 get_view 方法获取,如果设置了
通过 _set_view(view) 首先。
on_view_shown 方法在演示者视图之后调用
显示在图形界面中。在这种方法中应该加载数据,
并填写表格和表格。
如果在视图可见的演示者上,则调用 _open_other_presenter
然后将创建另一个演示者,并且该演示者将转到顶部
演示者堆栈,其视图将是图形界面中唯一可见的视图。
调用 _open_other_presenter 的演示者视图将不再可见。
在最后一次发生之前,调用演示者将接收程序的控制权
使用 on_view_covered 方法。
如果现在顶级演示者调用 _close_this_presenter,那么
其下方的演示者视图将再次可见,并且
演示者将通过 on_view_discovered 接收对主线程的控制。
在这种方法中,由于模型中的一些变化,视图应该被更新。
当栈顶的presenter调用**_close_this_presenter**
使用 on_closing_presenter 方法接收控制。在这种方法中
应该释放资源并移除观察者。致电后
on_closure_presenter 演示者和演示者的视图将是
删除,它将发生之前已解释的情况。
需要注意的是,如果关闭的演示者是
只有一个存在于整个应用程序中,即只有一个
窗口,它只拥有一个演示者,然后应用程序将关闭
状态码 0。要使用不同的代码关闭程序,请使用 exit_app
AbstractPresenter 的方法。
接收演示者的数据
演示者可以从它创建的另一个演示者那里接收数据,
如果第二个使用 _close_this_presenter_with_result(result_data: dict) 关闭
方法。通过这种方式,堆栈中位于下方的演示者接收对
程序通过 on_view\discovered\with_result(action: str, data: dict) 而不是
关于_查看_发现。 action 参数是传递给 Intent 时的操作
它被命令打开新的演示者。 result_data 是一个 Python 字典
在上的主持人可以通过
_ 关闭_this_presenter\with_result(result\data: dict)。
管理全局数据
可以创建数据以在整个应用程序中访问。这是
使用 set_global_data(key: str, data) 和 get_global_data(key: str) 完成
AbstractPresenter 的方法。您还可以使用该方法检查是否存在全局数据
has_global_data(key: str),如果存在则返回 True,否则返回 False。
深入了解意图
如前所述,Intent 是可以打开新演示者的原因。您可以指定
必须使用新的演示者在新窗口中打开
使用_new_window(使用_new_window:bool u003d False)。您还可以指定
如果要打开一个新窗口,则使用该方法使其成为模态或不模态
使用_modal(自我,模态:bool u003d False)。
可以使用带有 set_action(action: str) 的操作指定意图,如下所示
新的演示者可能会根据收到的操作采取不同的行为。
Intent 还允许通过 set_data(data: dict) 将数据传递给新的演示者。
要查看如何使用 Intent 的示例,请查看demo.py程序。
更多推荐

所有评论(0)