类引用错误 - 有时是一个问题

时间:2011-06-29 12:09:35

标签: python

好的,所以我不知道该搜索什么才能回答这个问题。

在我的代码中由于某种原因,我的一些类可以按照Python的说明引用

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

x = MyClass()

在我的代码中,我使用

导入了我的自定义python模块
import [custom module]
from [custom module] import *

接下来我引用了这个类

classRef = [classfunction]()

以下是我的实际代码,此模块名为“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()

下一个模块名为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

我得到的错误是我的引用没有在此行专门定义:

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

我不明白为什么有时引用类有效,有时却没有。这是一个PyDev故障,它是一个Eclipse故障吗?

***电脑资讯:

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***

1 个答案:

答案 0 :(得分:1)

如果我正确理解你,那么问题是您正在使用import / from .. import错误。首先,没有必要同时使用“导入模块”和“模块导入...”调用之后。

修改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>

修改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

编辑 - 在这里给你main.py一些小修正和问题/评论:

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()