我想在"img"
中使用browse_file()
grey_scale()
。
我可以使用band_count(type Int)
,但当我尝试在"img"
中使用grey_scale()
时,我收到以下错误:
the type of "img" is class 'spectral.io.bilfile.BilFile'
Traceback (most recent call last):
File "main.py", line 50, in grey_scale
view = imshow(img,(bandGrey,))`
NameError: global name 'img' is not defined`
我的代码:
def browse_file(self,MainWindow):
file = str(QtGui.QFileDialog.getOpenFileName(self,"Select Directory"))
img = envi.open(file) #load image to img object.
band_info = str(img.read_band)
band_count = int((band_info.split(start))[1].split(end)[0])
view = imshow(img,(1,0,0))
def grey_scale(self):
bandGrey = self.spinBox_grey_band.value()
print bandGrey #working
view = imshow(img,(bandGrey,)) #error
答案 0 :(得分:2)
看起来你需要让img
成为一个实例属性,以便它得到"保存"调用self
和browse_file
之间的grey_scale
:
def browse_file(self,MainWindow):
file = str(QtGui.QFileDialog.getOpenFileName(self,"Select Directory"))
img = envi.open(file) #load image to img object.
band_info = str(img.read_band)
band_count = int((band_info.split(start))[1].split(end)[0])
view = imshow(img,(1,0,0))
self.img = img
def grey_scale(self):
bandGrey = self.spinBox_grey_band.value()
print bandGrey #working
view = imshow(self.img,(bandGrey,)) #error
这当然意味着您需要确保在browse_file
之前调用grey_scale
,以便self.img
在使用之前定义。
答案 1 :(得分:1)
局部变量的意义在于它们只存在于函数中,因此您无法按照定义执行此操作。
通常,答案是传递变量的值。例如,browse_file
可以将img
返回给其调用者,并且该调用者可以将其保留,然后将其传递到grey_scale
。
另一个选择是使用类来保持状态。这些函数似乎已经是一个类的方法(基于self
参数),所以这里有正确的设计。只需用img
替换两个函数中的每个self.img
,现在这不是局部变量,它就是实例的成员。在同一实例上调用的每个方法都可以访问相同的值。但是,如果您创建同一个类的多个实例,则每个实例都有自己的img
。
答案 2 :(得分:0)
您需要从函数img
browse_file()
然后从函数中创建一个新的vaiable。
接下来将img添加到grey_scale()
中的参数列表中def browse_file(self,MainWindow):
file = str(QtGui.QFileDialog.getOpenFileName(self,"Select Directory"))
img = envi.open(file) #load image to img object.
band_info = str(img.read_band)
band_count = int((band_info.split(start))[1].split(end)[0])
view = imshow(img,(1,0,0))
return img
img = browse_file(self,MainWindow)
def grey_scale(self, img):
bandGrey = self.spinBox_grey_band.value()
print bandGrey #working
view = imshow(img,(bandGrey,)) #error
grey_scale(img)
你可以在课堂内重复使用img。
如果您希望使用该类的img变量,您可以将其设为全局
global img
img = browse_file(self,MainWindow)
或从班级创建变量。
即
img = class_object.browse_file(MainWindow)