7stud wrote: >>> Just like the message says: You are trying to use `str` (on the right hand >>> side of the assignment) before anything is bound to that name. >>> Ciao, >>> Marc 'BlackJack' Rintsch >> i know but i want the variable str(which i found out is a reserved >> word so i changed it) to be accessible all over __init__ right? >> > > "all over __init__" ? You could practice with a trivial example to > discover how things work in python: > > def f(): > num = 10 > print num > > f() > > def g(): > print num > num = 10 > > g() > > >> so i tried to delcare it in __init__ in the beginning of the framework >> class but then when i access it in the method Display i get that >> error. >> >> so how should i declare this variable to be able to access it >> everywhere? >> > > You don't declare variables in python. You just start using a > variable when you need it. In other words you don't do this: > > string my_str > my_str = "hello" > > You just write: > > my_str = "hello" > > >> i want another method "calculate" that can access the same string >> later and do the calculations(writing some other code now that will >> read and interpret that). > > Does this look familiar: > >> Another thing you should be aware of: self is like a class wide >> bulletin board. If you are writing code inside a class method, and >> there is data that you want code inside another class method to be >> able to see, then post the data on the class wide bulletin board, i.e. >> attach it to self. But in your code, you are doing this: >> >> self.btnDisplay = Button(self, text="7", default=ACTIVE) >> self.btnDisplay.grid(row=5, column=0, padx=5, pady=5) >> >> self.btnDisplay = Button(self, text="8", default=ACTIVE) >> self.btnDisplay.grid(row=5, column=1, padx=5, pady=5) >> >> As a result, your code continually overwrites self.btnDisplay. That >> means you aren't preserving the data assigned to self.btnDisplay. >> Therefore, the data does not need to be posted on the class wide >> bulletin board for other class methods to see. So just write: >> >> btnDisplay = Button(self, text="7", default=ACTIVE) >> btnDisplay.grid(row=5, column=0, padx=5, pady=5) >> >> btnDisplay = Button(self, text="8", default=ACTIVE) >> btnDisplay.grid(row=5, column=1, padx=5, pady=5)
To pick nits, "str" is not a reserved word (normally referred to in Python as s "keyword"). It's perfectly possible to write: >>> def str(x): ... return "Fooled you!" ... >>> str(3.14148) 'Fooled you!' >>> and have your program work. But it's not generally good practice to *shadow* built-in names, even when nothing stops you from doing so, simply because there is usually a group somewhere with an investment in using the standard names, and you will make their lives more difficult. regards Steve -- Steve Holden +1 571 484 6266 +1 800 494 3119 Holden Web LLC http://www.holdenweb.com/ -- http://mail.python.org/mailman/listinfo/python-list