0

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_menu.append(self.contenu_item) ... # 其他

       self.contenu_item("activate", contenu_callback )

我认为(可能是错误的)“contenu_callback”应该在 Myapp.py 中有它连接数据库和显示器,但我不明白怎么做?


(5分钟后编辑)

感谢您的回答,但我不确定我是否理解正确:
所以我从您的最后一行了解到的是,在模块“MyGui.py”中,我应该添加"import Myapp.py()"能够调用 "Myapp.activate_callback" ( "other.module" in this case being Myapp ).

因此,在全球范围内,我将拥有包含“import Mydata”和“import Mygui”的“Myapp.py”以及包含“import pygtk”和“import Myapp”的模块“Mygui.py”。

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

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

4

2 回答 2

0

这取决于您对分离的要求有多严格。如果你想稍微宽松一点,你可以让 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)

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

于 2012-06-30T06:59:44.410 回答
0

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

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)
于 2012-06-28T13:56:37.693 回答