2014-04-03 44 views
0

我想显示在文本框中的值,但我得到这个错误:如何解决python和tkinter中的AttributeError?

blue.set(B_mean1) 
AttributeError: 'numpy.ndarray' object has no attribute 'set' 

,我的代码是:

from Tkinter import Tk, Frame, BOTH 
from Tkinter import * 
import cv2 
from collections import * 
from CBIR import * 
from experiment import * 
from scipy.spatial import distance 
import Tkinter,tkFileDialog 
from PIL import Image, ImageTk 

class Example(Frame): 
    def __init__(self, parent): 
     Frame.__init__(self, parent,background="light grey")    
     self.parent = parent   
     self.initUI() 

    def initUI(self):  
     self.parent.title("PISE") 
     self.pack(fill=BOTH, expand=1) 

def open(): 
    path=tkFileDialog.askopenfilename(filetypes=[("Image File",'.jpg')]) 
    custName.set(path) 
    im = Image.open(path) 
    tkimage = ImageTk.PhotoImage(im) 
    myvar=Label(root,image = tkimage) 
    myvar.image = tkimage 
    myvar.pack() 
    myvar.place(x = 100, y = 100) 
    graylist1 = list() 
    resizelist1 = list() 
    eq_graylist1 = list() 
    cont_list1 = list() 
    ene_list1 = list() 
    homo_list1 = list() 
    cor_list1 = list() 
    B_mean1 = list() 
    G_mean1 = list() 
    R_mean1 = list() 
    dis_list1 = list() 

    imge = cv2.imread(path) 
    arr = array(imge) 
    g_img = cv2.imread(path,0) 
    gray_re_img = cv2.resize(g_img,(256,256)) 
    graylist1.append(gray_re_img) 

    equ = cv2.equalizeHist(gray_re_img) 
    eq_graylist1.append(equ) 

    re_img = cv2.resize(imge,(256,256)) 
    resizelist1.append(re_img) 

    blue, green, red = cv2.split(re_img) 
    total = re_img.size 
    B = sum(blue)/total 
    G = sum(green)/total 
    R = sum(red)/total 
    B_mean1.append(B) 
    G_mean1.append(G) 
    R_mean1.append(R) 

    im = skimage.io.imread(path, as_grey=True) 
    im = skimage.img_as_ubyte(im) 
    im /= 32 
    g = skimage.feature.greycomatrix(im, [1], [0], levels=8, symmetric=False, normed=True) 
    cont = skimage.feature.greycoprops(g, 'contrast')[0][0] 
    cont_list1.append(cont) 
    ene = skimage.feature.greycoprops(g, 'energy')[0][0] 
    ene_list1.append(ene) 
    homo = skimage.feature.greycoprops(g, 'homogeneity')[0][0] 
    homo_list1.append(homo) 
    cor = skimage.feature.greycoprops(g, 'correlation')[0][0] 
    cor_list1.append(cor) 
    dis = skimage.feature.greycoprops(g, 'dissimilarity')[0][0] 
    dis_list1.append(dis) 

    feature_matrix_ip = zip(B_mean1 , G_mean1 , R_mean1, cont_list1 , ene_list1 , homo_list1 , cor_list1 , dis_list1) 
    blue.set(B_mean1) 

root = Tk() 
root.geometry("1105x605+300+300") 
app = Example(root) 

label = Label(app, text='Python Image Search', fg = 'black',font = 'PoorRichard 24') 
label.pack() 
label.place(y = 5, x = 0) 

img = Image.open('logo.png') 
bg_img = ImageTk.PhotoImage(img) 

label1 = Label(app, image = bg_img) 
label1.place(y = 5, x = 1225) 

custName = StringVar(None) 
yourName = Entry(app, textvariable=custName) 
yourName.grid(column=0,row=0,sticky='EW') 
yourName.update() 
yourName.focus_set() 
yourName.pack(padx = 20, pady = 20,anchor='n') 
yourName.place(y = 60, x = 100, width = 525, height = 25) 

blue_label = Label(app,text = 'Blue Mean') 
blue_label.place(x = 850,y = 140) 
blue = IntVar() 
blue_text = Entry(app,textvariable = blue) 
blue_text.place(x = 1000,y = 140) 

button = Button(app, text='Select an Image',command = open) 
button.pack(padx = 1, pady = 1,anchor='ne') 
button.place(x = 650, y = 60) 

root.mainloop() 

所有我想知道的是如何显示的值放入文本框中。欢迎任何建议。

在此先感谢!

+0

http://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.html – Julius

+0

@Julius一个例子将帮助我:) –

+0

什么是文本框?在哪个变量中? – User

回答

0

你的问题是,你使用变量名blue两个不同的东西。有一次,它是一个numpy数组,另一个是IntVar。当你调用blue.set(...),你正在做的点在哪里blue引用一个numpy的阵列,因此错误信息'numpy.ndarray' object has no attribute 'set'

试着改变你的IntVar别的东西的名称,如blue_var,并确保你改变它无处不在。