2015-09-27 38 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