好的,所以我不知道该搜索什么才能回答这个问题。
在我的代码中由于某种原因,我的一些类可以按照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***
答案 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()