1

变量函数是通过类函数框架给出的。尝试在 add_function 中使用它时出现此错误。

AttributeError:类 FunctionFrame 没有属性“功能”

class FunctionFrame(Frame):
    """a simple application to allow a user ti enter an
    expressio
    n and evaluate it
    """
    def __init__(self, master):
        """
        a a=simple expression evaluator
        """
        Frame.__init__(self, master, relief=SUNKEN, bg='#A5A5A5', pady=3)
        Label(self, text='Function in x: ', bg='#A5A5A5').pack(side=LEFT)
        function = Entry(self, width=35).pack(side=LEFT, padx=2)
        Button(self, text='Select', command=self.select).pack(side=RIGHT, padx=4)
        colour = Entry(self, width=15).pack(side=RIGHT)
        Label(self, text='Function Colour: ', bg='#A5A5A5').pack(side=RIGHT, padx=2)

    def select(self):
        (rgb, hx)= askcolor()

class ButtonFrame(Frame):
    """a simple application to allow a user ti enter an
    expression and evaluate it
    """
    def __init__(self, master):
        """
        a a=simple expression evaluator
        """
        Frame.__init__(self, master, bg='#CECEF6')
        Button(self, text='Add Function', command=self.add_function).pack(side=LEFT)
        Button(self, text='Redraw All', command=self.redraw_all).pack(side=LEFT)
        Button(self, text='Remove Last Function', command=self.remove_last).pack(side=LEFT)
        Button(self, text='Remove All Functions', command=self.remove_all).pack(side=LEFT)
        Button(self, text='Exit', command=self.exit_app).pack(side=LEFT)


    def add_function(self):
        make_function(FunctionFrame.function)
4

3 回答 3

3

function被定义为内部的局部变量__init__

def __init__(self, master):
    function = Entry(self, width=35).pack(side=LEFT, padx=2)

function在 之外使用__init__,您需要将其设为实例属性:

def __init__(self, master):
    self.function = Entry(self, width=35).pack(side=LEFT, padx=2)

然后,在 中,ButtonFrame您需要创建一个实例FunctionFrame

def add_function(self):
    make_function(FunctionFrame(self).function)
于 2013-05-15T10:08:15.930 回答
1

您需要在实例上设置: function

self.function = Entry(self, width=35).pack(side=LEFT, padx=2)

没有self.,function只是您__init__方法中的一个本地名称,并在该方法完成时被丢弃。

您可能想对colour.

于 2013-05-15T10:07:36.733 回答
1

FunctionFrame.function 未在您的代码中定义。

快速修复是:

class FunctionFrame(Frame):

    def __init__(self, master):
        ...
        self.function = Entry(self, width=35).pack(side=LEFT, padx=2)
        ...



class ButtonFrame(Frame):
    ...
    def add_function(self):
        make_function(FunctionFrame(self.master).function)

不确定如何访问 Frame 的主属性

于 2013-05-15T10:10:32.590 回答