我尝试创建一个包含一些小部件的垂直滚动框架。
但是,当我将对象打包到其中时,框架的大小适合其中某个小部件的最大宽度。
我怎样才能让它坚持到右边?
我使用了以下代码:
RadioList.py
class RadioList(Frame):
def __init__(self, parent, *args, **kwargs):
Frame.__init__(self, parent)
self.pack()
self._frame = Frame(self, *args, **kwargs)
self._frame.pack(fill=BOTH, expand=YES)
self._var = IntVar()
# self._var = StringVar('a')
def add(self, text, value):
rb = Radiobutton(self._frame,
text=text,
value=value,
variable=self._var,
anchor=W,
# width=200
)
# rb.grid()
rb.pack(fill=X)
main.py:
class App(Frame):
def __init__(self, parent=None):
Frame.__init__(self, parent)
# self.geometry('400x300')
self.grid()
self.label = Label(self, text="hello world")
self.label.grid()
container = Frame(self)
container.grid(row=1, columnspan=3)
vframe = VerticalScrolledFrame(container)
# vframe.pack(fill=BOTH);
# vframe.pack()
# vframe.pack(side=LEFT, anchor=W)
vframe.grid()
rbl = RadioList(vframe.interior, bg="white")
for x in range(100, 150):
i = x + 1
t = n2w(i)
rbl.add(t, i)
rbl.grid(columnspan=3)
滚动条代码来自此处:https://stackoverflow.com/a/16198198/145682
此处提供完整代码:https://github.com/deostroll/pytk
答案 0 :(得分:0)
我认为问题在于您没有正确配置主窗口。如果希望包含可滚动框架的列填充窗口,则必须将列配置为具有" weight"告诉tkinter如何分配额外的空间。
例如:
class App(Frame):
def __init__(self, parent=None):
...
self.grid_columnconfigure(0, weight=1)
container.grid(row=1, columnspan=3)
不幸的是,您没有提供足够的代码来了解实际发生的情况。可能是内框架没有扩展以填充容器,可能是容器没有扩展以填充App
,或者可能是App
isn&# 39;扩展以填充根窗口。您可能需要配置App
所在的列,和/或配置container
所在的列。
如果App
是根窗口中唯一的内容,您可能需要考虑使用pack
而不是网格,因为您不必采取额外的步骤来配置行和列的重量。同样,如果vframe
中container
是pack
中的唯一内容,您也可以使用App
。
诀窍是有条不紊,并尝试一次只解决一个布局问题。首先,确保container
正在填充窗口。然后确保vframe
正在填充它应该填充的窗口的任何部分。然后,确保grid
填充应填充的窗口部分。
请注意,对于您使用grid_rowconfigure
管理儿童的任何容器,您应始终至少在一行和一列上调用grid_columnconfigure
和{{1}}来给予权重。