だから私はtkinterのキャンバスウィジェットを使って、スクロールバーを持つラベルでいっぱいのフレームを作成しました。フレームはそれに配置されたラベルのサイズにしか拡大しないことを除いて、すべてうまくいきます。フレームを親キャンバスのサイズに拡大したいのですが。
これは、キャンバスのフレームにpack(expand = True)(以下のコードでコメントアウトしています)を使用すると簡単に実行できますが、スクロールバーが機能しません。
これが適切なコードです:
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"))
色付きのフレームの画像も提供しているので、私が何を取得しているかを確認できます。ピンク色の領域は、mailbox_frameで塗りつぶす必要のあるキャンバスです(右側のスクロールバーが見えます)。
ありがとう!
キャンバスにバインディングを設定する<Configure>
イベント。キャンバスのサイズが変更されるたびに発生します。イベントオブジェクトからキャンバスの幅と高さを取得し、それを使用してフレームのサイズを変更できます。
他の誰かが知る必要がある場合に備えて、将来の参考のために:
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"))