2015-07-21 26 views
1

我試圖設置爲進入一個Tkinter的輸入字段值的全局變量,但我發現了以下錯誤:無法引用類中的Entry字段?

NameError: global name 'HealthEntry' is not defined

下面是相關代碼:

Health = 0 

class window(Tk): 
    def __init__(self, parent): 
     Tk.__init__(self, parent) 
     self.parent = parent 

     HealthEntry = Entry(self) 

     testButton = Button(self, text = "entry field test", command = self.printHealth) 
     testButton.grid(row=18, column=3) 

    def printHealth(self): 
     Health = HealthEntry.get() 
     print Health 

我我也嘗試將HealthEntry.get()更改爲window.HealthEntry.get(),但這也不起作用。我究竟做錯了什麼?

回答

1

使它成爲一個實際的屬性和使用self.HealthEntry,你可能也想爲testButton self.testButton做同樣的:

 self.HealthEntry = Entry()  
     self.testButton = Button(self, text = "entry field test", command = self.printHealth) 
     self.testButton.grid(row=18, column=3) 

    def printHealth(self): 
     Health = self.HealthEntry.get() 
     print Health 

爲了使全球性和訪問的init方法外,你將需要使用global關鍵字在init方法global HealthEntry中,但正確的方法是使其成爲如上所述的屬性。

2

因爲你的HealthEntry沒有用自己定義所以基本上他是在本地對__init__方法。

將其更改爲:self.HealthEntry

def __init__(self, parent): 
     Tk.__init__(self, parent) 
     self.parent = parent 

     self.HealthEntry = Entry(self) 

     testButton = Button(self, text = "entry field test", command = self.printHealth) 
     testButton.grid(row=18, column=3) 

def printHealth(self): 
    Health = self.HealthEntry.get() 
    print Health 

由於帕德里克在他的回答中寫道,你可能想使用testButton作爲一個類成員以及..

+0

那麼他還需要引用它在正確'printHealth'方法 – Pynchia

+0

新增了該方法,謝謝。 @Pynchia –