Class referencing Error - sometimes an issue
Question: Okay so I did not know what to search for in order to answer this question.

In my code for some reason some of my classes can be referenced as per
instructions by Python

    
    
    class MyClass:
        """A simple example class"""
        i = 12345
        def f(self):
            return 'hello world'
    
    x = MyClass()
    

In my code I have imported my custom python modules using

    
    
    import [custom module]
    from [custom module] import *
    

next I make a reference to the class

    
    
    classRef = [classfunction]()
    

Below is my actual code, this module is called "main.py"

    
    
    from Tkinter import *
    import os, sys
    import Tkinter, tkFileDialog
    from tkFileDialog import *
    from openpyxl.reader.excel import load_workbook
    from openpyxl.workbook import Workbook
    #custom python classes
    import reader
    import searchDog
    from searchDog import *
    from reader import *
    
    
    
    
    class appGUI:
        def __init__(self,frame):
            #set windows size 600 by 300
    
            #frame = Tk()
            frame.geometry("600x300+30+30")
            self.openExcel = Button(frame, text = "Open Defect Excel", command = lambda: self.openExcelFile())
            self.openExcel.place(x=10,y=10,width=100,height=25)
            self.openDefectTextFile = Button(frame, text ="Open Text File", command = lambda: self.openDefectText())
            self.openDefectTextFile.place(x=10,y=40,width=100,height=25)
            self.startButton = Button(frame, text="Start",command = lambda: self.startLoadProcess())
            self.startButton.place(x=10,y=70,width=100,height=25)
        def openExcelFile(self):
            self.openTemp = tkFileDialog.askopenfilename(parent = root, title = 'Select Defect Excel File')
        def openDefectText(self):
            self.openDefect = tkFileDialog.askopenfilename(parent = root, title= 'Select Defect Text File')
        def start(self):
            self.startLoadProcess()
    
    
        def startLoadProcess(self):
            #text file where defect comments are stored
            filePath = self.openDefect
    
            #keyword condition to search for
            keyword = "18360" #probably will put this in a loop
    
            #create an instance of ReadFile from searchDog
            readInText = ReadFile()
            keywordSearch = searchFile()
            #----End searchDog Reference
            #create an instance of readExcel from ExcelFileHandle
    
            i = 2
            #searches for and writes the comments into a text file
            while self.readData(i, 2, self.openTemp) != None:
                keywordSearch.searchForKeywordText(self.readData(i,2,self.openTemp), filePath,i) #searchDog Function
                self.loadExcelFile.save(self.openTemp)
                i += 1
    
        def readData(self,inputRow,inputColumn,excelFilePath):
    
            '''
            Constructor
            '''
            self.loadExcelFile = load_workbook(filename = self.openTemp)
            self.excelWorksheet = self.loadExcelFile.get_sheet_by_name('Defects')
            self.rowInput = inputRow
            self.columnInput = inputColumn
            self.cellValue = self.excelWorksheet.cell(row=self.rowInput,column=self.columnInput).value
            return self.cellValue, inputRow
    
    
    root = Tk()
    app = appGUI(root)
    root.mainloop()
    

the next module is called excelWiteIn.py

    
    
    #built in modules from python
    from openpyxl.reader.excel import load_workbook
    from openpyxl.workbook import Workbook
    
    #my custom modules from the project
    import searchDog
    import main
    
    
    class excelWriteInClass():
    
        '''
        writes data coming from searchDog into Defects page
        '''
    
    
        def writeToExcelFile(self,textLine,writeRow):
            '''
            Constructor
            '''
            self.searchDogRef = searchFile()
            self.appGuiRef = appGUI()
    
            self.excelDefectWorksheet = self.appGuiRef.loadExcelFile.get_sheet_by_name('Defects')
            self.excelDefectWorksheet.cell(row= writeRow, column = 11).value = textLine
    

the error I get is that the my reference is not defined specifically at this
line:

    
    
            self.searchDogRef = searchFile()
            self.appGuiRef = appGUI()
    

I don't understand why sometimes referencing classes work and sometimes they
do not. Is this a PyDev glitch, is it an Eclipse glitch?

***Computer Information:

    
    
    Eclipse V. Version: 3.6.2 Build id: M20110210-1200
    Compiling under Python 2.7
       - installed modules --> openPyxl
    using Latest PyDev plugin downloaded from Eclipse Market***
    


Answer: If i correctly understood you then the problem is that you are using
import/from .. import incorrectly. First of all there is no need to use both
'import module' and right after that call 'from module import ...'.

Modify main.py:

    
    
    import os, sys
    
    from tkFileDialog import <put here what you really need>
    from Tkinter import <put here what you really need>
    
    from openpyxl.reader.excel import load_workbook
    from openpyxl.workbook import Workbook
    
    #custom python classes
    from searchDog import <put here what you really need>
    from reader import <put here what you really need>
    

Modify excelWiteIn.py:

    
    
    from main import appGUI
    from searchDog import searchFile
    
    #OR
    
    self.searchDogRef = main.searchFile()# in case searchFile specified within main.py otherwise you need to specify proper path to module that contains it
    self.appGuiRef = main.appGUI()# note that you have to add 'frame' here
    

EDITED - putting here you main.py with small fixes and questions/comments:

    
    
    import os, sys # not used
    from Tkinter import Tk, Button
    from tkFileDialog import askopenfilename
    from openpyxl.reader.excel import load_workbook
    from openpyxl.workbook import Workbook
    
    #custom python classes
    from searchDog import searchFile, ReadFile
    from reader import <put here what you really need>
    
    class appGUI(object):
    
        def __init__(self, frame):
            #set windows size 600 by 300 
    
            #frame = Tk()
            frame.geometry("600x300+30+30")
            self.openExcel = Button(frame, text = "Open Defect Excel", command = lambda: self.openExcelFile())
            self.openExcel.place(x=10, y=10, width=100, height=25)
            self.openDefectTextFile = Button(frame, text ="Open Text File", command = lambda: self.openDefectText())
            self.openDefectTextFile.place(x=10, y=40, width=100, height=25)
            self.startButton = Button(frame, text="Start",command = lambda: self.startLoadProcess())
            self.startButton.place(x=10, y=70, width=100, height=25)
    
        def openExcelFile(self):
            # root? it not specified here
            self.openTemp = askopenfilename(parent=root, title='Select Defect Excel File') 
    
        def openDefectText(self):
            # root? it not specified here
            self.openDefect = askopenfilename(parent=root, title='Select Defect Text File') 
    
        def start(self):
            self.startLoadProcess()
    
        def startLoadProcess(self):
            #text file where defect comments are stored
            filePath = self.openDefect
    
            #keyword condition to search for
            keyword = "18360" #probably will put this in a loop
    
            #create an instance of ReadFile from searchDog
            readInText = ReadFile()
            keywordSearch = searchFile()
            #----End searchDog Reference
            #create an instance of readExcel from ExcelFileHandle
    
            i = 2
            #searches for and writes the comments into a text file
            while self.readData(i, 2, self.openTemp):
                keywordSearch.searchForKeywordText(self.readData(i, 2, self.openTemp), filePath, i) #searchDog Function
                self.loadExcelFile.save(self.openTemp)
                i += 1
    
        # excelFilePath not used at all
        def readData(self, inputRow, inputColumn, excelFilePath):
            '''
            Constructor
            '''
            # not sure that this is a good idea to load workbook each time
            self.loadExcelFile = load_workbook(filename = self.openTemp) 
            self.excelWorksheet = self.loadExcelFile.get_sheet_by_name('Defects')
            self.rowInput = inputRow
            self.columnInput = inputColumn
            self.cellValue = self.excelWorksheet.cell(row=self.rowInput, column=self.columnInput).value
            return self.cellValue, inputRow
    
    
    root = Tk()
    app = appGUI(root)
    root.mainloop()
    

