我的Python程序不断给我“未定义s_label”,因此它不会在标签上显示我的答案

时间:2018-07-15 06:07:19

标签: python variables defined

所以我的代码从根本上区分了我插入并在“ s_label”上输出的函数。这一直有效,直到我尝试为我的程序制作多个页面。现在发生的所有事情是我收到“未定义s_label”的错误,并且没有其他任何反应。我知道问题出在我如何放置代码,但我不知道如何解决它。

class PageOne(tk.Frame):

def __init__(self, parent, controller):
    tk.Frame.__init__(self, parent)
    label = tk.Label(self, text="Differentiation Calculator", font=LARGE_FONT)
    label.pack(pady=10,padx=10)

    button1 = tk.Button(self, text="Back to Home",
                        command=lambda: controller.show_frame(StartPage))
    button1.pack()



    #This positions the label for f(x)
    Label(self, text='Enter f(x)').pack(side='left')


    #This inputs the Function f(x), f(x) = (f_entry)
    f_entry = Entry(self, width=12)
    f_entry.pack(side='left')

    s_label = Label(self, width=20) 


    #This is the command that excecutes when we press the button ((Differentiate) f = )
    def calc(event=None):
        f_txt = f_entry.get()

        x = sp.Symbol('x') 

        res =  (sp.diff(f_txt,x))
        print(res)


        global s_label
        s_label.configure(text=res)   # display f(x) value

    Button(self, text=' (Differentiate) f = ', relief='flat',command=calc).pack(side='left')
    s_label.pack(side='left')  

1 个答案:

答案 0 :(得分:0)

当然不行了
更简单的示例(无效):

class A:
    def __init__(self):
        x=20
        def func():
            global x
            print(x)
        func()


if __name__ == '__main__':
    a = A()

尽管这样做:

x = 20
class A:
    def __init__(self):
        def func():
            global x
            print(x)
        func()


if __name__ == '__main__':
    a = A()

因此,您由此知道,使用global可以使用所有嵌套函数

之外的变量

另一个工作,例如

x = 20
def A():
    x = 30
    def B():
        global x
        print(x)
    B()

if __name__ == '__main__':
    A()

>> 20

这会给您同样的错误:

def A():
    x = 30
    def B():
        global x # You don't even require this statement over here
        print(x)
    B()

if __name__ == '__main__':
    A()

对于您的特定情况,您可以使用self变量,该变量会将您的任何变量绑定到该类的实例,您可以使用该变量,并修改self.variable_name引用该变量的任何位置,该变量将进行编辑/显示整个类实例的值。