【问题标题】:Unable to scroll a canvas full of buttons无法滚动充满按钮的画布
【发布时间】:2017-03-09 13:29:03
【问题描述】:

我之前构建了可滚动画布,但现在我必须用按钮填充其中一个,我不知道为什么滚动条处于非活动状态......也许问题是画布包含按钮?

奇怪的是它处于非活动状态,因为画布和滚动条似乎通过vscrollbar.setcv.yview 正确连接...

from Tkinter import *

def main():

  root = Tk()
  root.geometry("%dx%d+0+0" % (1800,1000))

  auxframe=Frame(root)
  auxframe.pack(fill=BOTH, expand=YES)

  cv = Canvas(auxframe, scrollregion=(0,0,8000,8000))
  vscrollbar = Scrollbar(auxframe, orient=VERTICAL)
  vscrollbar.pack(fill=Y, side=RIGHT)
  vscrollbar.config(command=cv.yview)
  cv.config(yscrollcommand=vscrollbar.set)
  cv.pack(side=LEFT, fill=BOTH, expand=TRUE)

  memimages=[]    
  for row_index in range(8):
      for col_index in range(8):
          iconimage = PhotoImage(file="test.gif")
          b=Button(cv,image=iconimage)
          memimages.append(iconimage)             
          b.grid(row=row_index, column=col_index, sticky=N+S+E+W)  


  mainloop()

main()

(编辑) 根据 Bryan 的回答,我通过添加它使其工作 - 请注意 fcv 未打包。

fcv=Frame(root)
cv.create_window(0, 0, anchor = "nw", window=fcv)

所有按钮都是 fcv 的子级:b=Button(fcv,image=iconimage)

我仍然不明白为什么文档(例如infohosttutorialspot)没有提到这个重要的事实。

【问题讨论】:

    标签: tkinter scrollbar


    【解决方案1】:

    画布不会滚动通过packplacegrid 添加到其中的对象。您必须使用画布方法create_window

    一种常见的技术是使用create_window 创建单个框架,然后您可以在放置在框架内的小部件上使用packplacegrid。示例见Adding a scrollbar to a group of widgets in Tkinter

    【讨论】:

    • 我测试了你的建议并且它有效。不幸的是,使用 create_window 会导致另一个问题,与它的最大大小有关,我在这里问过 stackoverflow.com/questions/42830037/… 。要是能看看就好了……
    猜你喜欢
    • 2022-01-05
    • 2014-07-12
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    • 2014-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多