为什么这不起作用。这直接来自教科书。我收到一个属性错误,说self._area不存在。
from Tkinter import *
import math
class CircleArea(Frame):
def __init__(self):
"""Sets up a window and widgets."""
Frame.__init__(self)
self.master.title("Circle Area")
self.grid()
#Label and field for radius
self._radiusLabel = Label(self, text = "Radius")
self._radiusLabel.grid(row = 0, column = 0)
self._radiusVar = DoubleVar()
self._radiusEntry = Entry(self, textvariable = self._radiusVar)
self._radiusEntry.grid(row = 0, column = 1)
#Label and field for the area
self._areaLabel = Label(self, text = "Area")
self._areaLabel.grid(row = 1, column = 0)
self._areaVar = DoubleVar()
self._areaEntry = Entry(self, textvariable = self._areaVar)
self._areaEntry.grid(row = 1, column = 1)
# The command button
self._button = Button(self, text = "Compute", command = self._area)
self._button.grid(row = 2, column = 0, columnspan = 2)
def _area(self):
"""Event handler for button."""
radius = self._radiusVar.get()
area = radius ** 2 * math.pi
self._areaVar.set(area)
def main():
CircleArea(). mainloop()
run = CircleArea()
run.main()
是因为_area方法在调用后声明了吗?这没有任何意义,为什么它不能使用向下编程技术。我刚刚开始学习GUI的新手。关于类的GUI的第一章。
编辑*:我希望弹出一个窗口并有一个输入字段用于输入圆的半径。带有Radius标签。以及基于半径的圆形区域结果的输出输入字段。以及计算它的底部的计算按钮。
我只是想习惯输入不同的命令等。我还没有参加过这个讲座。我只是看到这段代码会做什么以及它会是什么样子。如果这让你感觉更好,我会手工输入它。:P而不是复制和粘贴。
答案 0 :(得分:9)
问题是你的缩进是错误的。 _area
和main
在__init__
内定义,您不需要。下面是正确的缩进(您不需要main
函数)。
from Tkinter import *
import math
class CircleArea(Frame):
def __init__(self):
"""Sets up a window and widgets."""
Frame.__init__(self)
self.master.title("Circle Area")
self.grid()
#Label and field for radius
self._radiusLabel = Label(self, text = "Radius")
self._radiusLabel.grid(row = 0, column = 0)
self._radiusVar = DoubleVar()
self._radiusEntry = Entry(self, textvariable = self._radiusVar)
self._radiusEntry.grid(row = 0, column = 1)
#Label and field for the area
self._areaLabel = Label(self, text = "Area")
self._areaLabel.grid(row = 1, column = 0)
self._areaVar = DoubleVar()
self._areaEntry = Entry(self, textvariable = self._areaVar)
self._areaEntry.grid(row = 1, column = 1)
# The command button
self._button = Button(self, text = "Compute", command = self._area)
self._button.grid(row = 2, column = 0, columnspan = 2)
def _area(self):
"""Event handler for button."""
radius = self._radiusVar.get()
area = radius ** 2 * math.pi
self._areaVar.set(area)
run = CircleArea()
run.mainloop()
答案 1 :(得分:0)
实际上我认为你错过了main方法中的一个参数,你定义了一个CircleArea类,但是在python中你知道,类中定义的每个方法都必须有一个名为'self'的默认参数,所以试试这个
def main(self):
CircleArea()。主循环()
我认为它可以按你的意愿工作:)