如何用create_window改变框架内按钮的大小?



我的问题是我不能改变按钮的大小,使他们填满画布内的框架。按钮保持在一个很小的尺寸,它们只会随着输入的文本调整大小或者我也可以用width但是我想用relwidth填充这样我就可以很容易地调整大小

我试过调查,但是调查不起作用。我把fill="x"放到set_news中来填充宽度,但是它不能。

from tkinter import Frame, Label, Button, Entry, messagebox, ttk, Scrollbar, Canvas
import base64
import json

class WatchNewsFrame(Frame):
name = "WatchNewsFrame"
def __init__(self, parent, file):
super().__init__()
self.Parent = parent
self.file = file
self.initializecomponents()
def set_news(self):
data = json.load(open(self.file))["News"]
for key in range(30):
Panel = Button(self.frame, height=10)
Panel.config(bg="#656565", activebackground="#808080")
Panel.pack(fill="x")
pass

def initializecomponents(self):
Frame.__init__(self, self.Parent)
self.canvas = Canvas(self)
self.Scrollbar = ttk.Scrollbar(self, orient="vertical")
self.frame = Frame(self.canvas)
# this frame
self.config(background=self.Parent["background"])
self.place(relwidth=0.95, relheight=0.95, relx=0.5, rely=0.5, anchor="center")
# ItemsScrooll
self.Scrollbar.config(orient="vertical", command=self.canvas.yview)
self.Scrollbar.place(relheight=.85, relwidth=.015, relx=.95, rely=.5, anchor="center")
# itemsFrame
self.canvas.config(bg="#606060", highlightbackground="#FFFFFF", yscrollcommand=self.Scrollbar.set)
self.canvas.create_window(2, 0, window=self.frame, anchor="nw",)
self.canvas.place(relheight=0.85, relwidth=0.9, relx=0.5, rely=0.5, anchor="center")
self.canvas.bind('<Configure>', lambda e: self.canvas.config(scrollregion=self.canvas.bbox("all")))
# events
self.set_news()
pass
pass


既然你已经在这些按钮上使用了fill="x",你只需要设置框架的宽度与画布的宽度相同,当画布被调整大小时,那么这些按钮的宽度也将被改变。

...
# save the item ID of the frame
self.frame_id = self.canvas.create_window(2, 0, window=self.frame, anchor="nw")
...
# set width of the frame same as the canvas
self.canvas.bind('<Configure>', lambda e: self.canvas.itemconfigure(self.frame_id, width=e.width))
# update scrollregion when the frame is resized
self.frame.bind('<Configure>', lambda e: self.canvas.config(scrollregion=self.canvas.bbox("all")))
...

最新更新