У меня есть графический интерфейс, который отображает фигуру изображения в цикле на основе нажатия кнопки. Я добавляю панель инструментов к этой фигуре, чтобы вы могли увеличивать и уменьшать масштаб, но, несмотря на уничтожение всех дочерних элементов в назначенном кадре в каждом цикле, панели инструментов, похоже, выделяется все больше и больше места с каждым циклом (т. Е. Рамка фигуры становится все шире и шире). Вот соответствующие функции. Я перепробовал все, но он просто отказывается сотрудничать. Любая помощь будет очень признательна. Проблема, скорее всего, в функции «pick_single» ниже. В нем у меня есть блок уничтожения всех дочерних элементов, но видимо какой-то остаток панели инструментов где-то хранится.
#function to remove several of the toolbar buttons and only keep zoom and home
class Toolbar(NavigationToolbar2Tk):
NavigationToolbar2Tk.toolitems = [t for t in NavigationToolbar2Tk.toolitems if
t[0] not in ('Back','Forward','Pan','Subplots','Save',None)]
def set_message(self, s):
pass
def create_plot(image_cur):
global counter, txt_files
# f = Figure(figsize=(2,1.5),dpi=250,frameon=False)
f = Figure(figsize=(plotwidth, plotheight),dpi=dpi,frameon=False,tight_layout = True)
f.clear()
ax = f.add_subplot(111)
p1=ax.imshow(image_cur)
ax.get_xaxis().set_visible(False)
ax.get_yaxis().set_visible(False)
ax.set_title(str(counter+1)+' of '+str(len(txt_files)),fontsize=5)
return f
# function that picks the center of a scale through a mouse click
def pickc(event):
global st_cent, counter, store_centers,pxmm,trigg,cnt_r
x=event.xdata
y=event.ydata
store_centers[counter,:] = [x,y]
if trigg == -1:
cnt_r += 1
ratio_coords[cnt_r,:] = [x,y]
if cnt_r == 1:
trigg = 0
pxmm = np.sqrt((ratio_coords[0,0]-ratio_coords[1,0])**2+(ratio_coords[0,1]-ratio_coords[1,1])**2)
print(pxmm)
def pick_single():
global st_cent, counter, store_centers, txt_files, plotwidth, plotheight,dpi
#destroy all widgets associated with the frame
for widget in frame1.winfo_children():
widget.destroy()
counter += 1
if counter > len(txt_files):
counter = len(txt_files)
scale = imageio.imread(txt_files[counter])
# problems are likely somewhere in the remains of the function
frame1.update()
dpi = root.winfo_fpixels('1i')
plotwidth = frame1.winfo_width() / dpi
plotheight = frame1.winfo_height() / dpi
# create plot
fig1 = create_plot(image_cur=scale)
canvas = FigureCanvasTkAgg(fig1, master=frame1)
mplcursors.cursor(fig1)
canvas.draw()
canvas.get_tk_widget().pack(side=tk.RIGHT, fill=tk.X, expand=1)
toolbar = Toolbar(canvas, frame1, pack_toolbar=False)
toolbar.pack(side=tk.BOTTOM,fill=X)
toolbar.update()
fig1.canvas.callbacks.connect('button_press_event', pickc)
Я пробовал уничтожать виджеты в рамке, очищать холст и т. д. Ничего не помогает.
У меня есть графический интерфейс, который отображает фигуру изображения в цикле на основе нажатия кнопки. Я добавляю панель инструментов к этой фигуре, чтобы вы могли увеличивать и уменьшать масштаб, но, несмотря на уничтожение всех дочерних элементов в назначенном кадре в каждом цикле, панели инструментов, похоже, выделяется все больше и больше места с каждым циклом (т. Е. Рамка фигуры становится все шире и шире). Вот соответствующие функции. Я перепробовал все, но он просто отказывается сотрудничать. Любая помощь будет очень признательна. Проблема, скорее всего, в функции «pick_single» ниже. В нем у меня есть блок уничтожения всех дочерних элементов, но видимо какой-то остаток панели инструментов где-то хранится. [code]#function to remove several of the toolbar buttons and only keep zoom and home class Toolbar(NavigationToolbar2Tk): NavigationToolbar2Tk.toolitems = [t for t in NavigationToolbar2Tk.toolitems if t[0] not in ('Back','Forward','Pan','Subplots','Save',None)]
def set_message(self, s): pass
def create_plot(image_cur): global counter, txt_files # f = Figure(figsize=(2,1.5),dpi=250,frameon=False) f = Figure(figsize=(plotwidth, plotheight),dpi=dpi,frameon=False,tight_layout = True) f.clear() ax = f.add_subplot(111) p1=ax.imshow(image_cur) ax.get_xaxis().set_visible(False) ax.get_yaxis().set_visible(False) ax.set_title(str(counter+1)+' of '+str(len(txt_files)),fontsize=5) return f
# function that picks the center of a scale through a mouse click def pickc(event): global st_cent, counter, store_centers,pxmm,trigg,cnt_r x=event.xdata y=event.ydata store_centers[counter,:] = [x,y]
def pick_single(): global st_cent, counter, store_centers, txt_files, plotwidth, plotheight,dpi
#destroy all widgets associated with the frame for widget in frame1.winfo_children(): widget.destroy()
counter += 1 if counter > len(txt_files): counter = len(txt_files)
scale = imageio.imread(txt_files[counter])
# problems are likely somewhere in the remains of the function frame1.update() dpi = root.winfo_fpixels('1i') plotwidth = frame1.winfo_width() / dpi plotheight = frame1.winfo_height() / dpi