Typeerror: Imgoriginal() Missing 1 required positional argument: 'self'

Asked

Viewed 919 times

0

I’m creating a program using Python3 and Tkinter. As I am working with classes and the code is giant I cut out only the part that has been error.

I set a function to be used as a Scale command in Tkinter. and so far ok.

However, I also have a Spinbox with the same variable and also put the same function, but when I do this, the function works for Scale, but presents error in Spinbox

        def ImgOriginal(self):
        try:
            global raioMaior, raioMenor,img_teste, framemask, frameResult

            ySize, xSize = img_teste.shape
            hafY, hafX = int(ySize/2), int(xSize/2) 

            #Aplicar a transf fourier 
            transf1 = np.fft.fft2(img_teste)

            #Baixas frequencias para o centro 
            fshift1 = np.fft.fftshift(transf1)

            #Mascara        
            yy,xx = np.mgrid[-hafY:hafY,-hafX:hafX]
            distImg = np.sqrt(xx**2+ yy**2)        
            maskR1 = (distImg > raioMenor.get())
            maskR2 = (distImg < raioMaior.get())
            maskRadial = np.logical_and(maskR1, maskR2)
            #maskAngle = (np.sin(angleImg*2. + angle) >= angleThresh)  
            #maskImg = np.logical_and(maskAngle, maskRadial)
            maskImg = maskRadial
            maskImg[hafY,hafX] = True
            xmask = ma.make_mask(maskImg)  
            masked_img = fshift1 * xmask

            filtLog = np.log(np.maximum(np.abs(masked_img),1.)) 

            f_ishift1 = np.fft.ifftshift(masked_img)
            img_back_mask = np.fft.ifft2(f_ishift1)
            imgtratada = np.uint8(np.abs(img_back_mask))

            #Modulo na imagem nova 
            fourier = cv2.resize(filtLog,(300,300))
            imagem = PIL.Image.fromarray(np.double(fourier)*10)
            img = ImageTk.PhotoImage(imagem)         
            img_label = Label(framemask, image = img)
            img_label.configure(image = img)
            img_label.image = img
            img_label.place(x = 0, y =0) 

            imgtratada = cv2.resize(imgtratada,(400,400))
            imagem = PIL.Image.fromarray(np.double(imgtratada)*5)
            img = ImageTk.PhotoImage(imagem)         
            img_label = Label(frameResult, image = img)
            img_label.configure(image = img)
            img_label.image = img
            img_label.place(x = 0, y =0)
        except AttributeError: pass

    Slider1  = Scale(frameScale, width = 5, from_ =0, to =200,resolution = 0.01,length = 800,
                     orient = HORIZONTAL, variable = raioMenor, command = ImgOriginal)

    Slider1.place(x = 1, y = 1 )

    Spinbox1 = Spinbox(frameScale, from_ = 0.00, to = 200, increment = 0.01, width = 6,
                       textvariable = raioMenor, command = ImgOriginal)
    Spinbox1.place(x=820, y=15)

    Slider2  = Scale(frameScale, width = 5, from_ =0, to =700,resolution = 0.01,length = 800,
                     orient = HORIZONTAL, variable = raioMaior, command = ImgOriginal)
    Slider2.place(x=1, y=30)
    Spinbox2 = Spinbox(frameScale, from_ = 0.00, to = 700, increment = 0.01, width = 6,
                       textvariable = raioMaior,validatecommand = ImgOriginal)
    Spinbox2.place(x=820, y=45)

He says that the self argument is missing. But how is it possible to validate the function for the Scale and not for the Spinbox??

I just took a test and when I remove the self argument from my function, the function becomes valid for Spinbox, but not for Scale

  • Try to putdef ImgOriginal(self=None), makes sure that if he defines the self, that’s fine, but if he doesn’t define, that’s fine, too.

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.