Qt, Gtk用的都是MVC结构的设计, 并且Gtk用MVC更彻底, 比如GtkScale等, 都是MVC的, 而Qt却不全是.
如你所说, Qt只处理被显示的那部分数据, 可Gtk不同, 每一次向GtkListStore中插入条目时, liststore.append(...), 它都会先对之前的条目做一些检查之类的工作(GtkTreePath?), 并且还有一些其它操作(这个我还没来的及读源码, 但在mail-list中有人提出来), 也是很繁琐的; 而且, Gtk默认情况下, 是在等所有数据都插入到ListStore之后, 才会显示出来, 然后才能接受用户的操作, 这种设计在数据非常多时, 就有严重的性能问题了.
另外, 关于gtk的性能问题, 不晓得有没有人用过glade(GUI的设计工具), 当在glade中编辑一些widget时, 比如GtkTreeView 向里面加入新的TreeViewColumn/CellRenderer时, 会特别慢, 并且CPU很会跑的很高(70%左右, 在我笔记本上), 通常, 右键, 加入一个新的CellRenderer时, 可以先吃一口苹果, 或者喝口水, 之后这个新的CellRenderer才被创建出来. 这个性能问题, 在glade2中就有存在, 也有一些人在glade的mailing list中反映, 可到现在glade3.15了, 还是依然存在.
相反的, Qt的designer就不存在类似的问题. 这里是一些提升GtkTreeView性能的一些小技巧,
http://faq.pygtk.org/index.py?file=faq13.043.htp&req=show当然, 我并不愿意来黑gtk. 我是很喜欢用这个GUI toolkit的. 也用它写了一打软件, 可是, 在开发这些软件的过程中, 确实发现了gtk存在的一些问题.
话又说回来了, Qt也是存在很多问题的, 与Gtk相比的话, 比如QSetting很明显不如GSetting好用, 后者是非常统一的, 实现了类似windows下的注册表的功能, 这样的话, 修改配置变得非常容易了; 而QSetting(在linux平台, 当然在windows平台, QSetting是用的注册表), 只是用ini格式的文件保存一下配置而已, 这样的话, 就很难被其它软件修改了. 举个例子, Gnome的壁纸, 其设置信息是用GSetting保存起来的, 我们只需要在其它程序中调用gsetting的API, 就可以修改gnome的壁纸了, 而不用理会这些设置是用的什么格式.
最后, 是广告环节, 有朋友写的酷我音乐盒的linux桌面客户端, 用的就是python/gtk的框架, 各位不妨试用一下.https://
github.com/LiuLang/kwplayer