2017-03-16 79 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