2015-09-23 77 views
1

我使用Tkinter構建了一個應用程序,該應用程序根據在文本框中輸入的團隊來向標籤顯示統計信息。該應用程序可以工作,但我的代碼長度爲600行,其中大部分是初始化標籤。大多數標籤共享相同的格式(創建一個標籤變量,創建一個標籤,用網格定位標籤),所以我認爲應該有一種方法可以創建一個構造函數類,它會返回一個新變量參數。不幸的是,我迄今爲止不成功,主要是因爲我沒有OOP設計經驗。什麼是最好的方式去做這件事?以下是代碼,我想這兩個主要部分來代替:在Python中爲Tkinter標籤創建類

self.team2RecordlabelVariable = Tkinter.StringVar() 
team2Recordlabel = Tkinter.Label(self,textvariable=self.team2RecordlabelVariable,anchor='e', fg='white', bg="black") 
team2Recordlabel.grid(column = rColLStart, row = 1, columnspan = colRSpan, padx=(2,10), pady=(1,20), sticky = 'E') 

team2RL = Tkinter.Label(self,text="Record: ",anchor='e', fg='white', bg="black") 
team2RL.grid(column = rColStart, row = 1, columnspan = colLSpan, padx=(2,0), pady=(1,20), sticky = 'W') 
+0

爲什麼你爲每個標籤使用'StringVar'? –

+0

你能提供更多的上下文代碼嗎? –

+0

下面是每個標籤下面的代碼跡: '#設置textbox' '...'' #SET了進入button' '...'' 高達#Sets label' '自我.team1RecordlabelVariable = Tkinter.StringVar()' 'team1Recordlabel = Tkinter.Label(self,textvariable = self.team1RecordlabelVariable,anchor ='e',fg ='white',bg =「black」)' 'team1Recordlabel.grid column = lColRStart,row = 1,columnspan = colRSpan,padx =(2,10),pady =(1,20),sticky ='E')' ... #文本輸入框和按鈕按下,更新標籤 self.team1RecordlabelVariable.set(抓取TeamRecord(htmlTeam1)) – Aginor

回答

1

你可以,如果你使用一個類,如果你只是想創建一個自定義的標籤,但IMO也想打電話grid最好使用一個函數。恕我直言,一個小部件不應該自己調用grid,packplace,因爲這限制了你如何使用它。

由於您想要創建標籤並同時致電grid,所以您只需要一個簡單的輔助功能。在我的例子中,我也假設你並不真的需要每個標籤的StringVar,因爲你沒有顯示任何需要它的代碼。

def create_label(parent, text, row, column, colspan): 
    label = Tkinter.Label(parent, text=text, anchor='e', fg='white', bg="black") 
    label.grid(column = column, row = row, columnspan = colspan, padx=(2,10), pady=(1,20), sticky = 'E') 
    return label 
... 
self.team2Recordlabel = create_label(self, "", 1, rColLStart, colRSpan) 
+0

我在稍後的函數調用中使用StringVars。具體來說,當按下按鈕時,我的程序會使用從網站檢索到的信息更新標籤。但非常感謝您向我展示如何做到這一點。 – Aginor

+0

@JoshuaLaney:你不需要'StringVars'來更新標籤。他們將你管理的對象數量增加了一倍而沒有獲益。你可以直接修改標籤本身 - 'self.team2Recordlabel.configure(text =「foo」)' –

+0

有趣且非常有用。謝謝你的提示 – Aginor