滚动条从Tkinter画布上消失,并拒绝坚持侧包装

时间:2017-07-01 19:25:52

标签: python canvas tkinter

  1. 我正在尝试将滚动条附加到Tkinter画布。
  2. 为了测试滚动条,我动态生成了100" Hello World"标签,并将其打包在内容保持框架内。
  3. 我的代码失败了。的问题:

    1. 甚至没有显示滚动条。
    2. 内容框架会扩展为100个打包标签的完整高度。
    3. 有趣的是,如果我将self.frame_for_content.pack() 转移到 self.scrollbar.pack()下,滚动条就会重新出现。 (为什么会出现这种情况超出我的范围,但滚动条仍然不起作用或遵守side打包行为。)
    4. 我试图在scroll regionbbox上加入一些Brian Oakley的建议,但无济于事。

      我已将代码减少到最低限度,但无法完成。非常感谢帮助。

      import tkinter as tk
      import tkinter.ttk as ttk
      
      class TestGUI(tk.Tk):
          def __init__(self):
              super().__init__()
      
              self.canvas = tk.Canvas(self)
              self.frame_for_content = tk.Frame(self.canvas)
      
              self.canvas_frame = self.canvas.create_window((0,0), window=self.frame_for_content, anchor=tk.NW)
      
              self.scrollbar = tk.Scrollbar(self.canvas, orient=tk.VERTICAL, command=self.canvas.yview)
              self.canvas.configure(yscrollcommand=self.scrollbar.set)
      
              self.frame_for_content.pack()
              self.canvas.pack(side=tk.LEFT)
              self.scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
      
              for i in range(100):
                  tk.Label(self.frame_for_content, text="Hello World - " + str(i)).pack()
      
              self.update()
              self.canvas.config(scrollregion=self.canvas.bbox(tk.ALL))
      
      TestGUI().mainloop()
      

1 个答案:

答案 0 :(得分:4)

您不希望self.frame_for_content.pack(),因为您正在使用画布,就像该窗口小部件的几何管理器一样,因此self.canvas.create_window代替.pack或{{ 1}}。

要获得正确的尺寸,您可以获得宽度和宽度。画布边界框的高度。

我认为这可以满足您的需求:

.grid