2017-03-16 56 views
0

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

_“...在通过SC ...” - - 什么是“SC”? –

+0

您的代码缺少大量文件,并且依赖于会阻止其运行的文件。请阅读并遵循以下建议:[如何创建一个最小,完整和可验证的示例](http://stackoverflow.com/help/mcve) –

+0

本应该是这样,不知道为什么我把SC。 – poncanach

回答

1

我不能运行你的代码,因为它缺少代码,我没有所有依赖的输入文件。但是,我看到几个问题:

  1. 你永远不会调用grid在画布上,所以它是无形的,
  2. 你让所有的checkbuttons的根窗口的孩子,而不是 框架的一个孩子。
  3. 通过不显式指定一行,滚动条将进入第0行,其中 是与第一个检查按钮相同的行。由于您没有告诉 滚动条跨越多行,因此它总是只会与 行一样高(它只与检查按钮一样高)
  4. 您没有使用sticky选项,所以即使如果给予 滚动条的空间合适,滚动条将永远不会填充它。

我的建议是彻底重新开始。用画布创建窗口,并确保它可见。如果您最初为画布赋予独特的色彩,这将更容易形象化。

接下来,添加滚动条并确保它是可见的。滚动条需要与画布位于同一行或同一行,并且它需要具有“ns”(北,南)的sticky值。做到这一点 - 只有这一点 - 并确保在继续之前出现所有内容并正确调整大小。

一旦你有了这个,在画布上添加一个大的固定大小的框架。它需要比画布高很多,这样才能确保滚动条的工作。给它一个独特的颜色,并确保滚动条将滚动它。

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

+0

谢谢,它现在工作正常。这是我正在寻找但找不到的教程。添加每件作品时使用不同的颜色真的有助于了解它是如何结合在一起的。 – poncanach