python - 为什么我从 GUI Python 教科书中获取的这段代码有效?

标签 python user-interface

为什么这不起作用。这是直接来自教科书的。我收到一个属性错误,指出 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 真的很陌生,刚开始学习。第一章类(class)GUI。

编辑*:我希望弹出一个窗口,并有一个用于输入圆半径的输入字段。带有标签半径。以及基于半径的圆面积结果的输出输入字段。底部有一个计算按钮,用于计算它。

我只是想习惯输入不同的命令等等。我什至还没有参加过这个讲座。我只是在看看这段代码会做什么以及它会是什么样子。如果这样能让你感觉好些,我会全部手写出来。:P 而不是复制和粘贴。

最佳答案

问题是你的缩进是错误的。 _areamain 是在 __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()

关于python - 为什么我从 GUI Python 教科书中获取的这段代码有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20039354/

相关文章:

python - 获取列数据框中最后一个等于或最接近的值

python - .apply 如何在 Pandas DataFrame.groupby 上工作?

user-interface - Python 3.3 中的现代 GUI 编程

python - 等价于 =+ 的字符串,但将现有字符串附加到新字符串而不是添加到新字符串之前

python - XMPP SSL 握手失败

python - 使用 pythton xml 获取特定子值的属性

MATLAB slider 步进行为

c++ - 一般程序布局的良好资源(最好是 Python 或 C++)

java - JTable中如何控制焦点

java - 如何使 JTextField 在按钮单击后出现,并且只接受与另一个字符串相同长度的字符 - Java GUI