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) ......#others
self.contenu_item("activate", contenu_callback )
我认为(可能是假的)“contenu_callback” 应该在Myapp.py中它将数据库与显示器连接起来 但我不明白怎么做?
(edit after 5 minutes )
感谢您的回答,但我不确定我是否理解正确:
所以我从你的最后一行中理解的是,在模块“MyGui.py”中,
我应该添加"import Myapp.py()"
才能打电话
"Myapp.activate_callback" ( "other.module" in this case being Myapp )
。
所以全局我将拥有“Myapp.py”,它包含“import Mydata”和“import Mygui”以及模块“Mygui.py”,它将包含“import pygtk”和“import Myapp”。
我对“Myapp.py”与“MyGui”之间的循环关系感到不满意 和“MyGui”将导入“Myapp”
。
这是否真的应该将gui程序与应用程序处理分开?
答案 0 :(得分: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)
答案 1 :(得分: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)
后者更加脱钩但涉及更多仪式。