2017-05-26 64 views
1

正如你可以從我的代碼中看到的,我將tk.Frame子類化爲一個tkinter gui創建一個自定義小部件。我將在主GUI中實例化這個類,並且需要定期更改其中的標籤值。如果我使用tkinter變量類StringVar(),我需要使用它的.set()方法來更改引用它們的標籤的值。將tkinter變量類用作類屬性是不好的做法嗎?

這是不好的做法?我的意思是,如果除了我自己以外的人使用這個自定義小部件,他們將不得不知道使用.set()方法來傳遞一個新的值。有些事情對我來說並不合適......也許我正在推翻它。謝謝。

import tkinter as tk 

class CurrentTempFrame(tk.Frame): 
    def __init__(self, parent, width=200, height=120, 
       background_color='black', 
       font_color='white', 
       font = 'Roboto'): 

    # Call the constructor from the inherited class 
    tk.Frame.__init__(self, parent, width=width, height=height, 
         bg=background_color) 

    # Class variables - content 
    self.temperature_type = tk.StringVar() 
    self.temperature_type.set('Temperature') 
    self.temperature_value = tk.StringVar() 
    self.temperature_value.set('-15') 
    self.temperature_units = tk.StringVar() 
    self.temperature_units.set('°F') 


    self.grid_propagate(False)   # disables resizing of frame 
    #self.columnconfigure(0, weight=1) 
    #self.rowconfigure(0, weight=1) 

    title_label = tk.Label(self, 
          textvariable=self.temperature_type, 
          font=(font, -20), 
          bg=background_color, 
          fg=font_color) 

    value_label = tk.Label(self, 
          textvariable=self.temperature_value, 
          font=(font, -80), 
          bg=background_color, 
          fg=font_color) 

    units_label = tk.Label(self, 
          textvariable=self.temperature_units, 
          font=(font, -50), 
          bg=background_color, 
          fg=font_color) 

    title_label.grid(row=0, column=0) 
    value_label.grid(row=1, column=0) 
    units_label.grid(row=1, column=1, sticky='N') 


if __name__ == "__main__": 
    root = tk.Tk() 
    current_temp = CurrentTempFrame(root, font_color='blue') 
    current_temp.temperature_value.set('100') 
    current_temp.grid(column=0, row=0, sticky='NW') 
    root.mainloop() 

回答

2

這是不好的做法?我的意思是,如果除了我自己以外的人使用這個自定義小部件,他們將不得不知道使用.set()方法來傳遞一個新的值。 [...]。

你的行爲是不是不好的做法。創建一個類的實例變量是另一個類的實例是完全可以接受的。類實例來自tkinter沒有區別。

然而,如果其他人會使用你的類,你應該文件它。給班級及其所有公共方法文檔字符串。在課堂上,清楚地記錄每個實例變量的類型,以及它們的目的是什麼。爲方法做同樣的事情。記錄方法的用途和正確的用法。

換句話說,記錄你的類API。確保它清晰簡明,並且可以被其他人理解。這就是你如何確保你的班級的未來用戶(包括你自己)能夠理解你班級的用途以及應該如何使用它。

+0

謝謝基督徒,這是有道理的,我很感激。現在瞭解更多關於doc-strings的信息! –

+0

當然@Mike,很樂意幫忙。 [這是一個很好的與記錄Python代碼相關的資源](http://blog.dolphm.com/pep257-good-python-docstrings-by-example/)幫助你開始。 –

相關問題