Вот как выглядит пользовательский интерфейс ![enter image description here](https://i.stack.imgur.com/HtHpz.png)
Когда я щелкаю выделенную часть ![enter image description here](https://i.stack.imgur.com/K134q.png)
, а затем нажимаю кнопку на панели показывает правильно
![enter image description here](https://i.stack.imgur.com/XEthY.png)
Но когда я нажимаю ползунок, результирующий вывод покрывается: ![enter image description here](https://i.stack.imgur.com/S4YXM.png)
![enter image description here](https://i.stack.imgur.com/BHYQV.png)
Это код кнопки воспроизведения / остановки
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, где изображение изменяется и отображается на экране и удаляется. Остальная часть кода приведена только для справки на случай, если я пропущу что-то, чего не видел