Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在PyQt5树模型中使用PyQt5模型的最佳方法_Python_Design Patterns_Sqlalchemy_Pyqt5_Qabstractitemmodel - Fatal编程技术网

Python 在PyQt5树模型中使用PyQt5模型的最佳方法

Python 在PyQt5树模型中使用PyQt5模型的最佳方法,python,design-patterns,sqlalchemy,pyqt5,qabstractitemmodel,Python,Design Patterns,Sqlalchemy,Pyqt5,Qabstractitemmodel,我已经有了一个使用SQLAlchemy制作声明性模型的代码结构 示例表/模型: 存储库 存储库id 名称 物主 端点 存储库id 端点id 名称 方法 上下文 上下文id 端点id 父上下文id 配置 创建于 创建于 我想创建一个QtTree来选择存储库>端点>上下文>嵌套上下文 类似于IDE的浏览器视图,该视图显示两个文件夹/包/文件,并为每个文件夹/包/文件提供不同的右键单击菜单 我正试图了解实现这一点的正确方式 我看过GitHub,看看其他人都做了些什么,但大多数小型开源应用程序都只是使用

我已经有了一个使用SQLAlchemy制作声明性模型的代码结构

示例表/模型:

存储库 存储库id 名称 物主 端点 存储库id 端点id 名称 方法 上下文 上下文id 端点id 父上下文id 配置 创建于 创建于 我想创建一个QtTree来选择存储库>端点>上下文>嵌套上下文

类似于IDE的浏览器视图,该视图显示两个文件夹/包/文件,并为每个文件夹/包/文件提供不同的右键单击菜单

我正试图了解实现这一点的正确方式

我看过GitHub,看看其他人都做了些什么,但大多数小型开源应用程序都只是使用树形图,或多或少都有硬编码的视图,或者像Eric这样的大型项目,它们都在做类似于延迟加载的事情。。。而且我不确定这是否是我想要做的事情的全部过度使用-Eric中1700多行自定义实现代码似乎比我见过的任何其他代码都能提供更多的反馈。。。但我仍然有一个问题,我的模型问题已经半定义了一次

由于我主要在应用程序的其余部分使用SQLAlchemy,我是否应该首先创建/使用SqlAlchemyTableModel来构建每个模型,然后创建执行创建这些模型的逻辑的BrowserModel

RepositoryModel/EndpointModel/ContextModel应该是一个子类,还是仅仅通过泛型类创建它们就足够了

理想情况下,我希望存储库/端点/Etc在列表中有不同的图标和不同的上下文菜单。这些应该设置在他们的模型中吗?通过父模型?通过一个装饰代理?通过视图代理

我觉得我有一百万把锤子,但我不知道我看到的是钉子还是螺丝钉

参考:

我认为您应该从解释数据结构开始,例如,您指示存储库>端点>上下文>嵌套上下文,但根据您在方案中指示的内容,我看不出存储库与端点之间有什么关系。另一方面,上下文菜单、图标等与模型无关,但与视图有关,因此在这个问题中最好将其放在一边。最后,向大家展示如何使用SQLAlchemy来理解自己会很好better@eyllanesc,你回答了我最后一个问题,我非常感谢我错过了端点模型中的存储库id。-我看到很多模型通过覆盖数据并在显示角色调用时返回来生成图标。我在Github和live项目上看到的很多树代码似乎都采用了快捷方式,因为它们只使用一列来真正表示其模型,而且它们是一次性的视图/模型。就SQL Alchemy而言,它用于在项目中的其他位置执行复杂的连接和排序,但是这个特殊的部分没有使用任何需要它的东西,我可以使用内置的SqlTableModel。。。但是我必须复制数据库设置和定义模型结构的部分1图标很简单,如果结构定义良好,那么放置图标非常简单,所以我说我们不应该在这方面分心。2据我所知,您不想复制内容,所以您似乎想要实现SQLAlchemyXModel,这就是为什么我问您如何通过SQLAlchemy处理Repository>Endpoint>Context>嵌套上下文。3.你能更详细地解释一下嵌套上下文和父上下文id吗?当你意识到我评论的最后两部分是为了理解模型中信息的结构,从而能够实现一个合适的Qt模型。在GH中,有许多小项目使用类似虚拟的QTreeWidget,但在复杂的结构中,正如您所指出的,您需要定制视图和模型。