Python pygtk、回调方法和控制器

Python pygtk、回调方法和控制器,python,model-view-controller,user-interface,callback,pygtk,Python,Model View Controller,User Interface,Callback,Pygtk,pygtk中有一些我不理解的东西: 我尝试构建一个gui与slqlite数据库交互,以便在多台服务器上操作一些远程网络配置 所以我制作了三个文件: Mygui.py包含所有pygtk指令; Mydata.py包含所有sqlite操作 最后是Myapp.py,它应该在Mygui和sqlite之间进行交互 但我不知道如何实现回调函数及其定义: Myapp.py中的这些行: class Myapp(): def __init__(): self.data = Mydata()

pygtk中有一些我不理解的东西:

我尝试构建一个gui与slqlite数据库交互,以便在多台服务器上操作一些远程网络配置

所以我制作了三个文件:

Mygui.py包含所有pygtk指令; Mydata.py包含所有sqlite操作 最后是Myapp.py,它应该在Mygui和sqlite之间进行交互

但我不知道如何实现回调函数及其定义:

Myapp.py中的这些行:

 class Myapp():
   def __init__():
      self.data = Mydata()
      self.gui = Mygui()

对于Mygui.py中的以下行:

 class Mygui():
   def __init__():
。。。 self.Base_menu=gtk.menu self.contenu_item=gtk.MenuItem'contenu base self.Base\u菜单.附加self.contenu\u项 ... 其他

       self.contenu_item("activate", contenu_callback )
我认为contenu_回调应该在Myapp.py中可能是错误的,因为它将数据库与显示器连接起来,但我不知道如何连接

5分钟后编辑

谢谢你的回答,但我不确定我是否理解正确: 因此,我从您的最后一行中了解到,在模块MyGui.py中, 我应该添加import Myapp.py以便能够调用 Myapp.activate\u callback other.module在本例中为Myapp

因此,在全球范围内,我将有Myapp.py,其中包含import Mydata和import Mygui,还有Mygui.py模块,其中包含import pygtk和import Myapp

我对导入MyGui的Myapp.py和将导入Myapp的MyGui之间的循环关系感到不太满意


这真的是我应该做的将gui过程与应用程序处理分开吗?

回调可以是任何可调用的,因此,它们放在哪里取决于您

def activate_callback(widget, data=None):
    pass 
some_widget.connect("activate", activate_callback)


class SomeClass(object):
    def activate_callback(widget, data=None):
        pass
my_class = SomeClass()
some_widget.connect("activate", my_class.activate_callback)


import some.other.module
some_widget.connect("activate", some.other.module.activate_callback)

这取决于你对分离的要求有多严格。如果您希望对此有点放松,可以让myapp将自身传递给Mygui实例,然后Mygui可以调用myapp上的方法:

class Myapp():
   def __init__():
      self.data = Mydata()
      self.gui = Mygui(self)
或者,您可以在Mygui上定义一组事件,并让Myapp注册处理程序处理这些事件:

class Myapp():
   def __init__():
      self.data = Mydata()
      self.gui = Mygui()
      self.gui.connect("record-saved", self.record_saved_handler)

后者更为脱钩,但涉及更多仪式

谢谢你的回答,但我不确定我是否理解正确:非常感谢;这是最后一行self.gui.connect。。。我刚刚意识到我忘记了答案中的一个细节。虽然从概念上讲,您在那里所做的只是另一个事件,但没有规则规定您必须使用pygtk的事件基础结构来发送它。您可能在gui中有Myapp添加到的可调用项列表,您可能有Myapp提供实现的接口,或者您可能确实使用gui库的事件基础结构。