2015-09-27 73 views
0

下面的两个代码片段都将使用python创建一个空的Gtk窗口。但他们看起来完全不同。这两个窗口结构之间的区别?

一个vs另一个的主要优点是什么? 选择一个与另一个相比,是否存在任何性能,安全性或兼容性问题?

第一代码剪断:

#!/usr/bin/python 
from gi.repository import Gtk 

win = Gtk.Window() 
win.connect("delete-event", Gtk.main_quit) 
win.show_all() 
Gtk.main() 

第二代码剪断:

from gi.repository import Gtk, GdkPixbuf, Gdk 
import os, sys 

class GUI: 
    def __init__(self): 
     window = Gtk.Window() 
     window.set_title ("Hello World") 
     window.connect_after('destroy', self.destroy) 

     window.show_all() 

    def destroy(self, window): 
     Gtk.main_quit() 

def main(): 
    app = GUI() 
    Gtk.main() 

if __name__ == "__main__": 
    sys.exit(main()) 

Ref1至:1st snip-code reference

至Ref2:2nd snip-code reference

+1

对于更大的程序,第一种方法不会真正起作用。还有第三种方法。你也可以创建一个Gtk.Window的子类。 – elya5

+0

哦,我看到更大的程序,第一种方法将很像旧的结构化程序,全部在一个文件中,或者至少大部分在一个文件中.. – Fawix

回答

1

第二片段是更面向对象,它定义了您可以加入的类GUI n扩展为您的应用程序,这在我看来是更优雅的解决方案。此外,它正确地定义了一个main()函数并调用它,这为您提供了更大的灵活性,并允许您从别处导入此模块,而无需在导入时实例化GUI。正如您所问,没有真正的性能,兼容性或安全隐患。

然而,在第二个片段中,我会将window绑定到selfself.window = Gtk.Window()),允许您从类中的任何方法进行访问。

+0

明白了!所以它确实是一个结构化与面向对象方法的问题?说得通!谢谢 :) – Fawix