如何让滚动条粘在右边

时间:2017-01-06 06:58:23

标签: python tkinter

我尝试创建一个包含一些小部件的垂直滚动框架。

但是,当我将对象打包到其中时,框架的大小适合其中某个小部件的最大宽度。

我怎样才能让它坚持到右边?

enter image description here

我使用了以下代码:

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

1 个答案:

答案 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而不是网格,因为您不必采取额外的步骤来配置行和列的重量。同样,如果vframecontainerpack中的唯一内容,您也可以使用App

诀窍是有条不紊,并尝试一次只解决一个布局问题。首先,确保container正在填充窗口。然后确保vframe正在填充它应该填充的窗口的任何部分。然后,确保grid填充应填充的窗口部分。

请注意,对于您使用grid_rowconfigure管理儿童的任何容器,您应始终至少在一行和一列上调用grid_columnconfigure和{{1}}来给予权重。