Tkinter: Wie bekomme ich Rahmen in Leinwand Fenster zu erweitern, um die Größe der Leinwand?

Also habe ich das Canvas-Widget in tkinter benutzt, um einen Frame mit Etiketten zu erstellen, der eine Scrollbar hat. Alles funktioniert gut, außer dass der Rahmen nur auf die Größe der Etiketten, die in ihm platziert werden, erweitert wird – ich möchte, dass der Rahmen auf die Größe der übergeordneten Leinwand erweitert wird.

Dies kann leicht gemacht werden, wenn ich packe (expand = True) (was ich in den unten stehenden Code kommentiert habe) für den Rahmen in der Leinwand, aber dann dann die Scrollbar funktioniert nicht.

Hier ist das passende Code:

self.canvas = Canvas(frame, bg = 'pink') self.canvas.pack(side = RIGHT, fill = BOTH, expand = True) self.mailbox_frame = Frame(self.canvas, bg = 'purple') self.canvas.create_window((0,0),window=self.mailbox_frame, anchor = NW) #self.mailbox_frame.pack(side = LEFT, fill = BOTH, expand = True) mail_scroll = Scrollbar(self.canvas, orient = "vertical", command = self.canvas.yview) mail_scroll.pack(side = RIGHT, fill = Y) self.canvas.config(yscrollcommand = mail_scroll.set) self.mailbox_frame.bind("<Configure>", self.OnFrameConfigure) def OnFrameConfigure(self, event): self.canvas.configure(scrollregion=self.canvas.bbox("all")) 

Ich habe auch ein Bild mit farbigen Rahmen, so dass Sie sehen können, was ich bekomme. Der rosafarbene Bereich ist die Leinwand, die vom Postfach benötigt wird (Sie können die Bildlaufleiste rechts sehen):

Vielen Dank

2 Solutions collect form web for “Tkinter: Wie bekomme ich Rahmen in Leinwand Fenster zu erweitern, um die Größe der Leinwand?”

Setzen Sie eine Bindung auf das Canvas <Configure> -Ereignis, das ausgelöst wird, wenn das Canvas die Größe verändert. Aus dem Ereignisobjekt können Sie die Leinwandbreite und -höhe erhalten und diese verwenden, um die Größe des Rahmens zu ändern.

Nur für zukünftige Referenz, falls jemand anderes wissen muss:

  frame = Frame(self.bottom_frame) frame.pack(side = LEFT, fill = BOTH, expand = True, padx = 10, pady = 10) self.canvas = Canvas(frame, bg = 'pink') self.canvas.pack(side = RIGHT, fill = BOTH, expand = True) self.mailbox_frame = Frame(self.canvas, bg = 'purple') self.canvas_frame = self.canvas.create_window((0,0), window=self.mailbox_frame, anchor = NW) #self.mailbox_frame.pack(side = LEFT, fill = BOTH, expand = True) mail_scroll = Scrollbar(self.canvas, orient = "vertical", command = self.canvas.yview) mail_scroll.pack(side = RIGHT, fill = Y) self.canvas.config(yscrollcommand = mail_scroll.set) self.mailbox_frame.bind("<Configure>", self.OnFrameConfigure) self.canvas.bind('<Configure>', self.FrameWidth) def FrameWidth(self, event): canvas_width = event.width self.canvas.itemconfig(self.canvas_frame, width = canvas_width) def OnFrameConfigure(self, event): self.canvas.configure(scrollregion=self.canvas.bbox("all")) 
Python ist die beste Programmiersprache der Welt.