大家好,我创建了一个 python 包来轻松构建一个 MVP PyQt5 应用程序。我将把项目的 README.md 的内容留在这里。

您可以在此处查看源代码。

你可以在pypi中找到这个包。

说明

easy_mvp 是一个可以轻松构建桌面应用程序的软件包

使用 MVP 模式、PythonPyQt5。这是通过使用

一组类似于 Android 框架 中使用的类和实践。

这个包背后的基本思想是从

另一个演示者并且新的演示者填充窗口

完全的。这类似于 Android 应用程序,其中

当打开一个新的Activity时,他们用新的替换旧的。

如果按下后退按钮,则删除新的 Activity

旧的重新出现在屏幕上。这给人的印象

有一个堆栈的活动

此外,easy_mvp 提供了在超过

一个窗口**,因为桌面应用程序与 Android 应用程序非常不同。

安装

要安装此软件包,您需要在系统中安装 Python

然后你可以运行这个命令来安装这个包:

pip install easy_mvp

进入全屏模式 退出全屏模式

解释机制

以下解释反映在demo.py程序中。

easy_mvp创建的应用模型是这样的:

[App Manager 和 windows](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 继承的类中的事件流是这样的:

[flow_of_calls_on_presenter](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 环境中的其他类就可以访问该视图。

视图可以通过 AbstractPresenterget_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程序。

Logo

Python社区为您提供最前沿的新闻资讯和知识内容

更多推荐