如何处理包含多个窗口的Glade项目

7 投票
4 回答
4223 浏览
提问于 2025-04-11 19:44

我正在开发一个使用PyGTK和glade的应用程序,目前有16个窗口/对话框,大小大约是130KB,最终会有大约25个窗口/对话框,大小会达到200KB。目前,我把所有的窗口都放在一个大的glade文件里。当我需要打开一个窗口时,我是这样调用的...

self.wTree = gtk.glade.XML("interface.glade", "WindowXYZ")

我在想,把每个窗口分成单独的glade文件是不是更好。这样的话,不是一个包含25个窗口/对话框的文件,而是25个各自独立的文件,每个文件里只有一个窗口/对话框,我可以这样调用:

self.wTree = gtk.glade.XML("windowxyz.glade")

你们觉得这样做哪个方法更好呢?有没有哪个方法对资源的消耗更大?如果使用单独的glade文件,命名控件会简单很多。例如,我把所有的确认按钮命名为“windowxyz_ok”,但我可以直接改成“ok”,这样就简单多了。不过,缺点是修改不同窗口时可能会稍微不方便。

我欢迎任何意见和建议。谢谢!

4 个回答

0

我使用不同的glade文件来处理不同的窗口。但是我把和某个窗口相关的对话框放在同一个glade文件里。正如你所说,命名的问题确实让人头疼。

2

你有没有花时间去测试一下,这样做有没有什么区别?

问题在于,按照我的理解,Glade在解析XML文件时总是会创建所有的控件。所以如果你打开这个XML文件,只读取一个控件,那就浪费了很多资源。

另一个问题是,如果你想要再创建一个相同的控件,你就需要重新读取这个文件。

我之前的做法是把那些只需要创建一次的控件(比如关于窗口、主窗口等)放在一个Glade文件里,而把那些需要多次创建的控件放在不同的Glade文件里。

10

在我的项目中,我总是为每个glade文件准备一个窗口。我建议你在你的项目中也这样做。

以下是两个主要原因:

  • 这样做会更快,使用的内存也更少,因为每次调用gtk.glade.XML()时,都会解析整个文件。虽然你可以传入根参数来避免为所有窗口创建控件树,但即使你不关心那些窗口,你还是得解析所有的XML。
  • 从概念上讲,每个窗口有一个顶层结构会更容易理解。你只需看文件名,就能轻松知道某个对话框或窗口在哪个文件里。

撰写回答