【问题标题】:scrollbar doesn't expand to full screen滚动条不会扩展到全屏
【发布时间】:2017-03-16 01:55:55
【问题描述】:

我需要在我的程序的一部分中添加一个滚动条,因为他们希望它显示所有的人,而不是其他部分只显示一个组。在浏览 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

【问题讨论】:

  • "... 透过 SC..." - 什么是“SC”?
  • 您的代码缺少很多部分,并且依赖于阻止其运行的文件。请阅读并遵循此处的建议:How to create a Minimal, Complete, and Verifiable example
  • 应该是这样的,不知道我为什么放SC。
  • 好的,那么“SO”是什么意思?堆栈溢出?
  • 是的,堆栈溢出。我在其他帖子中看到过这样写的。

标签: python-3.x tkinter scrollbar


【解决方案1】:

我无法运行您的代码,因为它缺少代码,而且我没有这依赖的所有输入文件。但是,我发现了几个问题:

  1. 你永远不会在画布上调用grid,所以它是不可见的,
  2. 您将所有的复选按钮设置为根窗口的子级,而不是 框架的孩子。
  3. 通过不明确指定行,滚动条进入第 0 行 与第一个检查按钮在同一行。因为你没有告诉 滚动条跨越多行它总是只有那么高 行(只有一个复选按钮那么高)
  4. 您没有使用sticky 选项,因此即使为 滚动条是合适的,滚动条永远不会填满它。

我的建议是完全重新开始。仅使用画布创建您的窗口,并确保它是可见的。如果你一开始就给画布一个独特的颜色,这将更容易可视化。

接下来,添加滚动条并确保它可见。滚动条需要与画布位于同一行或多行,并且它的sticky 值必须为“ns”(北、南)。执行此操作 - 并且仅执行此操作 - 并确保所有内容均正确显示并调整大小,然后再继续。

完成后,将一个固定大小的大框架添加到画布中。它需要比画布高得多,这样才能确保滚动条正常工作。给它一个独特的颜色,并确保滚动条会滚动它。

只有在您完成所有这些之后,您才开始将小部件添加到内部框架。

【讨论】:

  • 谢谢,它现在工作正常。这是我一直在寻找但找不到的教程。为添加的每件作品使用不同的颜色确实有助于了解它们是如何组合在一起的。
猜你喜欢
  • 1970-01-01
  • 2015-04-19
  • 2013-10-24
  • 2011-07-30
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 2012-01-31
相关资源
最近更新 更多