在另一个类函数中使用类的入口

时间:2013-05-15 10:01:29

标签: python python-2.7 tkinter

变量函数通过类功能框架给出。当试图在add_function中使用它时,我得到了这个错误。

  

AttributeError:class 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)

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

您需要在实例上设置 function

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

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

你可能想对colour做同样的事情。

答案 2 :(得分: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

的主属性