Изображение не удаляется в Tkinter - PullRequest
0 голосов
/ 23 марта 2020

Вот как выглядит пользовательский интерфейс enter image description here

Когда я щелкаю выделенную часть enter image description here

, а затем нажимаю кнопку на панели показывает правильно

enter image description here

Но когда я нажимаю ползунок, результирующий вывод покрывается: enter image description here

enter image description here

Это код кнопки воспроизведения / остановки

 def test(self):

        self.img.config(image ='')


        self.index +=1

        img = cv2.imread("foot.png")

        df = self.df

        df = self.df.loc[self.df["index"] == self.index] 

        p0 = []
        p0.append(df.loc[df["foot"] == "right",'pressure[0]'].iloc[0])
        p0.append(df.loc[df["foot"] == "right",'pressure[1]'].iloc[0])
        p0.append(df.loc[df["foot"] == "right",'pressure[2]'].iloc[0])
        p0.append(df.loc[df["foot"] == "right",'pressure[3]'].iloc[0])
        p0.append(df.loc[df["foot"] == "right",'pressure[4]'].iloc[0])
        p0.append(df.loc[df["foot"] == "right",'pressure[5]'].iloc[0])
        p0.append(df.loc[df["foot"] == "right",'pressure[6]'].iloc[0])
        p0.append(df.loc[df["foot"] == "right",'pressure[7]'].iloc[0])
        p0.append(df.loc[df["foot"] == "right",'pressure[8]'].iloc[0])
        p0.append(df.loc[df["foot"] == "right",'pressure[9]'].iloc[0])
        p0.append(df.loc[df["foot"] == "right",'pressure[10]'].iloc[0])
        p0.append(df.loc[df["foot"] == "right",'pressure[11]'].iloc[0])
        p0.append(df.loc[df["foot"] == "right",'pressure[12]'].iloc[0])
        p0.append(df.loc[df["foot"] == "right",'pressure[13]'].iloc[0])
        p0.append(df.loc[df["foot"] == "right",'pressure[14]'].iloc[0])
        p0.append(df.loc[df["foot"] == "right",'pressure[15]'].iloc[0])
        p0.append(df.loc[df["foot"] == "left",'pressure[0]'].iloc[0])
        p0.append(df.loc[df["foot"] == "left",'pressure[1]'].iloc[0])
        p0.append(df.loc[df["foot"] == "left",'pressure[2]'].iloc[0])
        p0.append(df.loc[df["foot"] == "left",'pressure[3]'].iloc[0])
        p0.append(df.loc[df["foot"] == "left",'pressure[4]'].iloc[0])
        p0.append(df.loc[df["foot"] == "left",'pressure[5]'].iloc[0])
        p0.append(df.loc[df["foot"] == "left",'pressure[6]'].iloc[0])
        p0.append(df.loc[df["foot"] == "left",'pressure[7]'].iloc[0])
        p0.append(df.loc[df["foot"] == "left",'pressure[8]'].iloc[0])
        p0.append(df.loc[df["foot"] == "left",'pressure[9]'].iloc[0])
        p0.append(df.loc[df["foot"] == "left",'pressure[10]'].iloc[0])
        p0.append(df.loc[df["foot"] == "left",'pressure[11]'].iloc[0])
        p0.append(df.loc[df["foot"] == "left",'pressure[12]'].iloc[0])
        p0.append(df.loc[df["foot"] == "left",'pressure[13]'].iloc[0])
        p0.append(df.loc[df["foot"] == "left",'pressure[14]'].iloc[0])
        p0.append(df.loc[df["foot"] == "left",'pressure[15]'].iloc[0])
        positions = p0
        positions.sort(reverse = True)

        for i in range(0,32):
            SB = self.get_bb(self.guide, i)
            bb_attributes= self.load_attributes(SB)#get small box attributes,label and length



            x = bb_attributes['x']
            y = bb_attributes['y']
            w = bb_attributes['width']
            h = bb_attributes['height']
            if i >= 4 and i <= 7:

                x = x+4

            x2 = (x+w)
            y2 = y+h

            # Draw the image


             # Draw the image
            if i <=6:
                p = positions.index(p0[i])
                j = 0 + (12*p)
                CENTER = (int((x+x2)/2), int((y+y2)/2))


                cv2.circle(img, CENTER, 17, (j,j,255), -1)

            if i >6 and i <=21:
                p = positions.index(p0[i])
                g = 111 + (p)
                b = 0 + (6*p)
                CENTER = (int((x+x2)/2), int((y+y2)/2))


                cv2.circle(img, CENTER, 17, (b,g,255), -1)

            if i > 21:
                p = positions.index(p0[i])
                j = 0 + (6*p)
                CENTER = (int((x+x2)/2), int((y+y2)/2))


                cv2.circle(img, CENTER, 17, (j,j,255), -1)



            TEXT_FACE = cv2.FONT_HERSHEY_PLAIN
            TEXT_SCALE = 0.6
            TEXT_THICKNESS =2
            TEXT = str(p0[i])



            text_size, _ = cv2.getTextSize(TEXT, TEXT_FACE, TEXT_SCALE, TEXT_THICKNESS)
            text_origin = ( int(CENTER[0] - text_size[0] / 2), int(CENTER[1] + text_size[1] / 2))

            cv2.putText(img, TEXT, text_origin, TEXT_FACE, TEXT_SCALE, (255,255,255))

            cv2.imwrite('centertext_out.png', img)

        load = Image.open('centertext_out.png')
        load= load.resize((500, 500), Image.ANTIALIAS)
        render = ImageTk.PhotoImage(load)
        self.img = Label( image=render)
        self.img.image = render
        self.img.place(x=150, y=5)
        if self.pause == 0:
            self.win.after(3,self.test)

А это код для гистограммы:

 def bargraph(self):
        self.img.config(image='')
        self.play.place_forget()
        self.stop.place_forget()
        self.scale.place_forget()



   self.fig.canvas.draw()
    self.fig.canvas.flush_events()
    self.graphtype ="bar"

    right = self.df.loc[(self.df["index"]==self.index) & (self.df.foot == "right"),"total_force"].values
    left = self.df.loc[(self.df["index"]==self.index) & (self.df.foot == "left"),"total_force"].values

    data = [[left[0],right[0]]]
    X = ["left", "right"]

    self.ax.clear()
    self.ax.set_ylim(0,self.df["total_force"].unique().max())
    barlist = self.ax.bar(X , data[0], color = 'b', width = 0.25)


    barlist[0].set_color('r')

    self.scale = tk.Scale(self.win, variable=self.value, orient="horizontal",length = 470, 
                     from_=self.df['index'].unique().min(), to=self.df['index'].unique().max(), resolution =1,command=self.updateScale)
    self.canvas.place(x= 150, y = 5)
    self.scale.place(x=250, y = 400)
    self.stop.pack(expand='true',fill='both')
    self.stop.place(x=200, y =400)
    self.play.pack(expand='true',fill='both')
    self.play.place(x=150, y = 400)
    self.fig.canvas.draw()
    self.fig.canvas.flush_events()

Вот код для слайдера:

def updateScaleFoot(self,value):
        self.img.config(image='')
        self.fig.canvas.draw()
        self.fig.canvas.flush_events()

        df = self.df.loc[self.df["index"] ==int(value)] 

    img = cv2.imread("foot.png")
    p0 = []
    p0.append(df.loc[df["foot"] == "right",'pressure[0]'].iloc[0])
    p0.append(df.loc[df["foot"] == "right",'pressure[1]'].iloc[0])
    p0.append(df.loc[df["foot"] == "right",'pressure[2]'].iloc[0])
    p0.append(df.loc[df["foot"] == "right",'pressure[3]'].iloc[0])
    p0.append(df.loc[df["foot"] == "right",'pressure[4]'].iloc[0])
    p0.append(df.loc[df["foot"] == "right",'pressure[5]'].iloc[0])
    p0.append(df.loc[df["foot"] == "right",'pressure[6]'].iloc[0])
    p0.append(df.loc[df["foot"] == "right",'pressure[7]'].iloc[0])
    p0.append(df.loc[df["foot"] == "right",'pressure[8]'].iloc[0])
    p0.append(df.loc[df["foot"] == "right",'pressure[9]'].iloc[0])
    p0.append(df.loc[df["foot"] == "right",'pressure[10]'].iloc[0])
    p0.append(df.loc[df["foot"] == "right",'pressure[11]'].iloc[0])
    p0.append(df.loc[df["foot"] == "right",'pressure[12]'].iloc[0])
    p0.append(df.loc[df["foot"] == "right",'pressure[13]'].iloc[0])
    p0.append(df.loc[df["foot"] == "right",'pressure[14]'].iloc[0])
    p0.append(df.loc[df["foot"] == "right",'pressure[15]'].iloc[0])
    p0.append(df.loc[df["foot"] == "left",'pressure[0]'].iloc[0])
    p0.append(df.loc[df["foot"] == "left",'pressure[1]'].iloc[0])
    p0.append(df.loc[df["foot"] == "left",'pressure[2]'].iloc[0])
    p0.append(df.loc[df["foot"] == "left",'pressure[3]'].iloc[0])
    p0.append(df.loc[df["foot"] == "left",'pressure[4]'].iloc[0])
    p0.append(df.loc[df["foot"] == "left",'pressure[5]'].iloc[0])
    p0.append(df.loc[df["foot"] == "left",'pressure[6]'].iloc[0])
    p0.append(df.loc[df["foot"] == "left",'pressure[7]'].iloc[0])
    p0.append(df.loc[df["foot"] == "left",'pressure[8]'].iloc[0])
    p0.append(df.loc[df["foot"] == "left",'pressure[9]'].iloc[0])
    p0.append(df.loc[df["foot"] == "left",'pressure[10]'].iloc[0])
    p0.append(df.loc[df["foot"] == "left",'pressure[11]'].iloc[0])
    p0.append(df.loc[df["foot"] == "left",'pressure[12]'].iloc[0])
    p0.append(df.loc[df["foot"] == "left",'pressure[13]'].iloc[0])
    p0.append(df.loc[df["foot"] == "left",'pressure[14]'].iloc[0])
    p0.append(df.loc[df["foot"] == "left",'pressure[15]'].iloc[0])
    positions = p0
    positions.sort(reverse = True)


    for i in range(0,32):
        SB = self.get_bb(self.guide, i)
        bb_attributes= self.load_attributes(SB)#get small box attributes,label and length



        x = bb_attributes['x']
        y = bb_attributes['y']
        w = bb_attributes['width']
        h = bb_attributes['height']
        if i >= 4 and i <= 7:

            x = x+4

        x2 = (x+w)
        y2 = y+h

        # Draw the image


         # Draw the image
        if i <=6:
            p = positions.index(p0[i])
            j = 0 + (12*p)
            CENTER = (int((x+x2)/2), int((y+y2)/2))


            cv2.circle(img, CENTER, 17, (j,j,255), -1)

        if i >6 and i <=21:
            p = positions.index(p0[i])
            g = 111 + (p)
            b = 0 + (6*p)
            CENTER = (int((x+x2)/2), int((y+y2)/2))


            cv2.circle(img, CENTER, 17, (b,g,255), -1)

        if i > 21:
            p = positions.index(p0[i])
            j = 0 + (6*p)
            CENTER = (int((x+x2)/2), int((y+y2)/2))


            cv2.circle(img, CENTER, 17, (j,j,255), -1)


        TEXT_FACE = cv2.FONT_HERSHEY_PLAIN
        TEXT_SCALE = 0.6
        TEXT_THICKNESS =2
        TEXT = str(p0[i])



        text_size, _ = cv2.getTextSize(TEXT, TEXT_FACE, TEXT_SCALE, TEXT_THICKNESS)
        text_origin = ( int(CENTER[0] - text_size[0] / 2), int(CENTER[1] + text_size[1] / 2))

        cv2.putText(img, TEXT, text_origin, TEXT_FACE, TEXT_SCALE, (255,255,255))

    cv2.imwrite('centertext_out.png', img)

    load = Image.open('centertext_out.png')
    load= load.resize((500, 500), Image.ANTIALIAS)
    render = ImageTk.PhotoImage(load)
    img = Label( image=render)
    img.image = render
    img.place(x=150, y=5)

Возможно, я что-то упускаю. Вы можете сосредоточиться на заданной части c, где изображение изменяется и отображается на экране и удаляется. Остальная часть кода приведена только для справки на случай, если я пропущу что-то, чего не видел

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...