如何处理包含多个窗口的Glade项目
我正在开发一个使用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。
- 从概念上讲,每个窗口有一个顶层结构会更容易理解。你只需看文件名,就能轻松知道某个对话框或窗口在哪个文件里。