差異

2014-02-12 96 views
0

下面的代碼是我在得到一個GUI應用程序來更新原有的企圖其字體等,,當用戶在config.ini文件設置改變了它:差異

def on_config_change(self, config, section, key, value): 
    """ 
    sets font,size colour etc.. 
    when user changes in settings. 
    """ 
    if config is self.config: 
    token = (section, key) 
    if token == ('Font', 'button_font'): 
     print('Our button font has been changed to', value) 
     GetInformation().lay_button.font_size = str(value) 
     GetInformation().bet_button.font_size = str(value) 


def build(self): 
    self.config.write() 
    return GetInformation() 

我的代碼更新了配置,但屏幕從未更新,無需重新啓動應用程序。

下面的代碼工作:

def on_config_change(self, config, section, key, value): 
    """ 
    sets font,size colour etc.. 
    when user changes in settings. 
    """ 

    if config is self.config: 
     token = (section, key) 
     if token == ('Font', 'button_font'): 
      print('Our button font has been changed to', value) 
      self.getInformation.lay_button.font_size = str(value) 
      self.getInformation.bet_button.font_size = str(value) 


def build(self): 
    self.config.write() 
    self.getInformation = GetInformation() 
    return self.getInformation 

是什麼調用GetInformation()lay_button.font_size 和self.getInformation.lay_button.font_size之間的區別?

回答

1

除非您設計專門的代碼(通常是辛格爾頓模式),Class().method()創建從Class實例化一個新的對象,並對其方法調用method由於沒有指定接收變量,因此對象被銷燬

self.object.method()另一方面在現有對象self.object上調用方法method。這個對象是持久的,因爲它被保存爲頂級類的成員(self)。

在你的第一個例子中,你實際上在三個不同的對象上調用不同的方法。在方法on_config_change中,兩個對象立即銷燬。在第二個示例中,所有調用都應用於同一個對象,然後保留其修改後的屬性。

+0

謝謝,讓我感到困惑的是在使用self.getInformation = GetInformation()之前使用self.getInformation。 –

+0

在函數的情況下,語句的執行順序與其在文件中的位置不相關。這個代碼當然只適用於在'on_config_change'之前調用'build'函數。如果不是這種情況,你最終會得到'AttributeError',因爲'self.getInformation'不存在。 – Cilyan

1

設置GetInformation().lay_button.font_size改變lay_button的字體大小,您剛剛創建,並沒有掛接到任何一個全新GetInformation

設置self.getInformation.lay_button.font_size更改lay_button的字體大小爲GetInformationon_config_change開火。它的GetInformation這是你的系統,因此它是你需要做的工作。

+0

謝謝,這使得它更清晰。 –