Die Platzzuteilung in der Tkinter-Symbolleiste erhöht sich mit jeder neuen Figur in einer SchleifePython

Python-Programme
Anonymous
 Die Platzzuteilung in der Tkinter-Symbolleiste erhöht sich mit jeder neuen Figur in einer Schleife

Post by Anonymous »

Ich habe eine GUI, die eine Bildfigur basierend auf einem Tastenklick in einer Schleife zeichnet. Ich füge dieser Figur eine Symbolleiste hinzu, damit Sie hinein- und herauszoomen können, aber trotz der Zerstörung aller untergeordneten Elemente im zugewiesenen Rahmen bei jeder Schleife scheint der Symbolleiste mit jeder Schleife (d. h. dem Figurenrahmen) immer mehr Platz zugewiesen zu werden wird immer breiter). Hier sind die relevanten Funktionen. Ich habe alles versucht und es weigert sich einfach zu kooperieren. Jede Hilfe wäre sehr dankbar. Das Problem liegt wahrscheinlich in der Funktion „pick_single“ unten. Darin habe ich einen Block, um alle untergeordneten Elemente zu zerstören, aber anscheinend werden irgendwo Reste der Symbolleiste aufbewahrt.

Code: Select all

#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)

Ich habe versucht, Widgets im Rahmen zu zerstören, die Leinwand zu löschen usw. Nichts scheint zu funktionieren.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post