Python 在其他函数中设置全局变量

Python 在其他函数中设置全局变量,python,tkinter,global-variables,Python,Tkinter,Global Variables,我试图设置在“on_button”函数中计算的面积和周长变量的值,并在标签中使用这些值。我对在代码中使用global感到困惑,因为有些人说它不好 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:")

我试图设置在“on_button”函数中计算的面积和周长变量的值,并在标签中使用这些值。我对在代码中使用global感到困惑,因为有些人说它不好

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()

您可以这样访问变量:

self.area.set(float(self.width)*float(self.height))
即使在外面,你也可以做以下事情:

object.width

以获取参数的值。不需要全局:)

请修复您的契约您有什么问题?如果我修正了缩进,取消注释
self.area
行,并将
text=self.area
更改为
textvariable=self.area
,则计算面积似乎可以正常工作,并且您没有使用全局变量。那么你到底面临什么问题?@cwallenpole修复了缩进。感谢您让我知道。@fhdrsdg我正在尝试获取输入到条目中的值,并在areaValLabel上显示结果。如果您将代码作为第一次发布时的代码,并且只更改我在上一条评论中提到的内容,则它将起作用。没有
self.width
属性。