简体   繁体   中英

Global variable is not defined

I'm trying to read a file with python, by posting the address in input line. In my plan, when I press the button, program will read the file, make all needed work with the text inside the first file, and write the result into a second one:

import Tkinter

class Generator(Tkinter.Tk):

    def __init__(self,parent):
        Tkinter.Tk.__init__(self,parent)
        self.parent=parent
        self.initialize()

    def initialize(self):
        self.grid()
        self.addressLink = Tkinter.StringVar()
        self.entry=Tkinter.Entry(self,textvariable=self.addressLink)
        self.entry.grid(column=0,row=0,sticky='EW')

        self.entry.bind("<Return>", self.OnPressEnter)
        self.entry.bind(".", self.OnPressDot) # verify that address was accepted
        self.addressLink.set(u"Enter your input file's address here!")

        button=Tkinter.Button(self,text=u'Generate the list!',command=self.OnButtonClick)
        button.grid(column=1,row=0)

        self.labelVariable = Tkinter.StringVar()
        label = Tkinter.Label(self, textvariable=self.labelVariable,
                              anchor="w",fg="white",bg="blue")
        label.grid(column=0,row=1,columnspan=2,sticky='EW')
        self.labelVariable.set(u"Enter Address !")


        self.grid_columnconfigure(0,weight=1) 
        self.resizable(True,False)

    def ProgramBody(readlink):
        excelWrite=open('/Users/BUR/Desktop/final_TK.txt','w')

        z=0
        for index, line in enumerate(readlink, start=0):
            keywrds=[]
            title=line.split("+")
            title=[lines.strip()for lines in title]
            print title[0]
            print index

            header="Title"+"\t"+"Price equal to title:"+"\t"+"keyword1"+"\t"+"keyword2"+"   \t"+"keyword3"+"\t"+"keyword4"+"\t"+"keyword5\t"+"Manufacturer Part Number\n"
            exclWrt(header)

        excelWrite.close()

    def FileRead(tsink):
        excelRead=open(tsink,'r')
        print tsink
        ProgramBody(tsink)

    def OnButtonClick(self): 
        link=(self.addressLink.get())
        # print link
        self.labelVariable.set(link+" (Here is your button press!) ")
        FileRead(link)

    def OnPressEnter(self,event):
        self.labelVariable.set(self.addressLink.get()+" (Here is your address!)")

    def OnPressDot(self,event):
        self.labelVariable.set(self.addressLink.get()+" (Here is your address!!!)")

if __name__=="__main__":

app=Generator(None)
app.title('Converter')
app.mainloop()

#excelRead=open('/Users/BUR/Desktop/listings/data.txt','r')


def exclWrt(typo):
    excelWrite.write(typo)

Program runs, but when I press button it gives me:

> Exception in Tkinter callback Traceback (most recent call last):  
> File
> "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk/Tkinter.py",
> line 1470, in __call__
>     return self.func(*args)   File "/Users/BUR/Documents/Python/Temp+price+keyw.1", line 114, in
> OnButtonClick
>     FileRead(link) NameError: global name 'FileRead' is not defined

What did I miss?

You're using a class. First, you'll have an instance of the class passed to every function. Usually it's named self :

class A:
    def something(self, my_arguments)

And, to call something from the class, you do this:

def something_else(self, another_arguments):
    self.something(another_arguments)

The first argument will automatically be passed. Also, __init__ is called when you create an instance of your class, so you have no need of a separate initialize function.

I suggest you read more about classes here . This is just a very short solution for your problem.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM