变量功能通过类功能框给出。当尝试在add_function中使用它时,出现此错误。


  AttributeError:类FunctionFrame没有属性'function'


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)

最佳答案

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)

关于python - 在另一个类函数中使用一个类的条目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16562108/

10-12 21:26