Распределение пространства на панели инструментов Tkinter увеличивается с каждой новой фигурой в цикле.Python

Программы на Python
Ответить
Anonymous
 Распределение пространства на панели инструментов Tkinter увеличивается с каждой новой фигурой в цикле.

Сообщение Anonymous »

У меня есть графический интерфейс, который отображает фигуру изображения в цикле на основе нажатия кнопки. Я добавляю панель инструментов к этой фигуре, чтобы вы могли увеличивать и уменьшать масштаб, но, несмотря на уничтожение всех дочерних элементов в назначенном кадре в каждом цикле, панели инструментов, похоже, выделяется все больше и больше места с каждым циклом (т. Е. Рамка фигуры становится все шире и шире). Вот соответствующие функции. Я перепробовал все, но он просто отказывается сотрудничать. Любая помощь будет очень признательна. Проблема, скорее всего, в функции «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)

Я пробовал уничтожать виджеты в рамке, очищать холст и т. д. Ничего не помогает.

Подробнее здесь: https://stackoverflow.com/questions/793 ... -in-a-loop
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»