2015-03-04 9 views
0

Я пытаюсь установить значение переменной области и периметра, которые вычисляются в функции on_button и использовать их в методах. Я запутался в использовании глобального кода, потому что некоторые говорят, что это не хорошо.Установить глобальную переменную в другой функции

import Tkinter as tk 

class SampleApp(tk.Tk): 
    def __init__(self): 
     tk.Tk.__init__(self) 
     self.area = 0 
     self.widthLabel = tk.Label(self, text="Width:") 
     self.widthLabel.grid(row=0, column=0) 

     self.widthEntry = tk.Entry(self) 
     self.widthEntry.grid(row=0, column=1) 

     self.heightLabel = tk.Label(self, text="Height:") 
     self.heightLabel.grid(row=1, column=0) 

     self.heightEntry = tk.Entry(self) 
     self.heightEntry.grid(row=1, column=1) 

     #self.areaValLabel = tk.StringVar() 
     #self.areaValLabel.set(0) 

     self.areaLabel = tk.Label(self, text="Area:").grid(row=3, column=0) 
     self.areaValLabel = tk.Label(self, textvariable=self.area).grid(row=3, column=1) 

     self.PerLabel = tk.Label(self,text="Perimeter:").grid(row=4, column=0) 
     #self.perValLabel =tk.Label(self, text=perimeter).grid(row=4, column=1) 

     self.button = tk.Button(self, text="Calculate", command=self.on_button).grid(row=2, column=0) 

def on_button(self): 
     print self.widthEntry.get() 
     print self.heightEntry.get() 
     width = self.widthEntry.get() 
     height = self.heightEntry.get() 
     print float(width)*float(height) 
     self.area.set(float(width)*float(height)) 


app = SampleApp() 
app.title("HW1") 
app.mainloop() 
+0

Пожалуйста, исправьте свои отступы – cwallenpoole

+0

На ваш вопрос? Если я исправлю отступ, раскомментируйте строки 'self.area' и измените' text = self.area' на 'textvariable = self.area', вычисление области, кажется, работает нормально, и вы не используете глобальные переменные. Так в чем именно проблема, с которой вы сталкиваетесь? – fhdrsdg

+0

@ cwallenpoole фиксировал отступы. спасибо, что сообщили мне. @ fhdrsdg Я пытаюсь получить значение, которое вводится в записи, и показывать результат на areaValLabel. –

ответ

-3

Вы можете получить доступ к переменным следующим образом:

self.area.set(float(self.width)*float(self.height)) 

Даже снаружи вы можете сделать что-то вроде:

object.width 

, чтобы получить значение параметров. Нет необходимости в глобальном :)

+0

Я пробовал оба, но не работал. Спасибо –

+0

Нет атрибута 'self.width'. –