使用python,sqlite3和gtk

时间:2015-07-23 14:02:52

标签: python model-view-controller gtk pygtk

我正在开发一个pygtk应用程序,我采用了MVC结构。 但我不认为我在实现中遵循标准的MVC模式。

请建议我如何使用MVC来解决以下问题陈述。

我在我的应用程序中使用python,gtk,sqlite3

应用程序的问题陈述:
数据存在于日志文件中。它应该被提取并显示在GUI中。 GUI可以有多个视图(如浏览器选项卡),显示从日志文件中提取的数据(用户可以从同一个数据库表创建多个视图)。用户可以通过GUI视图过滤/搜索数据。过滤条件可能因视图而异。

使用MVC结构的当前实施:
当前,在GUI中,存在按钮“创建视图”,其在点击时创建视图以显示提取的数据。 从日志文件中提取数据(Controller提取数据)并将其添加到sqlite数据库(Model)。获取sqlite数据库表中的数据并将其添加到gtk.Treemodel中,该gtk.Treemodel在gtk.Treeview(View)中显示它。每次用户单击“创建视图”时,Controller都会实例化View类并在GUI中创建一个新选项卡。

我创建了三个类Model,View和Controller来实现这一目标。 Controller实例化Model和View。应用程序在运行时,实例化继续等待GUI事件的Controller(点击“Create View”等...使用gtk主循环)

我需要一些帮助! 我已经读过,在MVC中,如果模型(数据库)被更改,视图也会被更改,反之亦然。是否可以使用sqlite3和gtk.Treeview实现相同的目标。

简而言之,我的问题是:

  1. 如何从数据库中提取数据时更新应用程序GUI?在MVC示例中,有一些Observer类在模型更改时调用回调函数。如何针对上述问题陈述编写相同的内容?
  2. 无论如何我可以将sqlite3数据库设置为gtk.Treeview的treemodel,这样如果在数据库表中插入任何行,它会在树视图中更新吗?
  3. 有没有使用MVC架构并使用python,gtk,sqlite构建的示例?

2 个答案:

答案 0 :(得分:1)

这是我最终在我的应用程序中实现的!如果有更好的方法,请告诉我。

我使用gtk.GenericTreeModel在gtk.Treeview中显示来自sqlite数据库的数据。

当用户点击“点击查看”时,会创建 sqlite视图并连接到gtk.GenericTreeModel,以便在gtk.Treeview(GUI)中显示数据。

如果在创建sqlite视图后将数据添加到数据库,为了更新gtk.Treeview,我们需要发出“row-inserted”信号。

来自github的项目conduit有一个将sqlite连接到gtk通用树模型的示例。

希望这有帮助!

答案 1 :(得分:0)

我不知道是否有任何现有的例子;你描述的内容对你的问题非常具体。

但是,您可以使用Gda库以Gtk.TreeModel的形式连接到sqlite数据库。