滚动条不会扩展到全屏

时间:2017-03-16 01:55:56

标签: python-3.x tkinter scrollbar

我需要在程序的某个部分添加一个滚动条,因为他们希望它显示所有人,而不是只显示另一部分显示的一个组。在浏览SC时,大多数滚动条问题都使用Tkinter而不是tkinter并使用pack而不是grid。我遇到的问题是我的代码只在第一行的末尾创建一个小滚动条。我尝试了sticky = E的不同变体,但它没有创建全屏滚动条。有人可以在课堂设置中使用tkinter和grid指向正确的方向吗?

    class ButtonClickSignin(Frame):

        def __init__(self):

            self.win2 = Tk()
            self.win2.title('Sign-In')
            self.win2['bg'] = 'blue'
            self.win2.geometry('635x635+200+100')
            center(self.win2)

            self.canvas = Canvas(self.win2)
            Frame.__init__(self, self.win2)
            self.frame = Frame(self.canvas)
            self.scrollbar = Scrollbar(self.win2, orient = VERTICAL)
            self.scrollbar.config(command = self.canvas.yview)
            self.scrollbar.grid(column = 5)
            self.canvas.config(yscrollcommand = self.scrollbar.set)
            self.canvas.create_window((0, 0), window = self.frame)
            self.win2.bind('<Configure>', self.onFrameConfigure)

            self.checkbuttons()

        def checkbuttons(self):
            filenames = ['grade_pk.txt', 'grade_kinder.txt', 'grade_one.txt',
                    'grade_two.txt', 'grade_three.txt', 'grade_four.txt',
                    'grade_five.txt', 'grade_six.txt', 'grade_seven.txt',
                    'grade_eight.txt', 'grade_drop_in.txt']
            with open('sign_in.txt', 'w') as outfile:
                for names in filenames:
                    with open(names) as infile:
                        outfile.write(infile.read())
            rw = 0  
            cl = 0
            file = open('sign_in.txt', 'r')

            for name in file:

                cb1 = Checkbutton(self.win2, text = name, onvalue = 1, offvalue = 0,
                            height = 2, width = 22, background = 'blue')
                cb1.grid(row = rw, column = cl, padx = 8, pady = 8)
                cl += 1
                if cl == 3:
                    cl = 0
                    rw += 1

1 个答案:

答案 0 :(得分:1)

我无法运行您的代码,因为它丢失了代码,而且我没有所依赖的所有输入文件。但是,我看到了几个问题:

  1. 你永远不会在画布上调用grid,因此它是不可见的,
  2. 您将所有检查按钮设为根窗口的子项而不是 框架的孩子。
  3. 通过不明确指定行,滚动条将进入第0行 是与第一个checkbutton相同的行。因为你没有说出来 滚动条跨越多行,它总是只有那么高 行(仅与检查按钮一样高)
  4. 你没有使用sticky选项,所以即使给出的空间也是如此 滚动条是合适的,滚动条永远不会填充它。
  5. 我的建议是彻底重新开始。只用画布创建窗口,并确保它可见。如果您最初为画布赋予独特的颜色,这将更容易可视化。

    接下来,添加滚动条并确保其可见。滚动条需要与画布位于同一行或多行,并且它需要具有sticky值&#34; ns&#34; (北,南)。这样做 - 只有这一点 - 并确保在继续之前显示所有内容并正确调整大小。

    完成后,在画布中添加一个大的固定大小的帧。它需要比画布高得多,以便您可以确保滚动条工作。给它一个独特的颜色,并确保滚动条将滚动它。

    只有在您完成所有操作后,才开始向内框添加小部件。