使用pyGTK和Builder XML文件的最佳实践

时间:2012-03-27 15:34:23

标签: python

我通常使用Glade设计GUI,从而生成一系列Builder XML文件(每个应用程序窗口都有一个这样的文件)。

现在我的想法是定义一个类,例如MainWindow,继承自gtk.Window并实现应用程序主窗口的所有信号处理程序。问题是,当我从包含XML文件中检索主窗口时,它将作为gtk.Window实例返回。

到目前为止我采用的解决方案如下:

我已按以下方式定义了一个“Window”类

class Window():
def __init__(self, win_name):
    builder = gtk.Builder()
    self.builder = builder
    builder.add_from_file("%s.glade" % win_name)
    self.window = builder.get_object(win_name)
    builder.connect_signals(self)

def run(self):
    return self.window.run()

def show_all(self):
    return self.window.show_all()

def destroy(self):
    return self.window.destroy()

def child(self, name):
    return self.builder.get_object(name)

在实际的应用程序代码中,我已经定义了一个新类,比如MainWindow,它继承了frow Window,看起来像

class Main(Window):
def __init__(self):
    Window.__init__(self, "main")

### Signal handlers #####################################################

def on_mnu_file_quit_activated(self, widget, data = None):
    ...

字符串“main”指的是名为“main”的主窗口,它位于XML Builder文件“main.glade”中(这是我决定采用的一种约定)。

所以问题是:如何直接从gtk.Window继承,比如定义类Foo(gtk.Window),并将builder.get_object(win_name)的返回值重新转换为Foo?

0 个答案:

没有答案