Tkinter:将滚动条与画布组合

时间:2019-03-02 01:44:42

标签: python tkinter scrollbar python-2.x

我知道这不是第一次提出这样的问题,但是即使经过大约2个小时的浏览,我仍然无法正常工作:

因此,我试图创建一个Tkinter-Frame,其中包含多个Button(例如,我花了30个)。但是因为程序中没有足够的空间,所以需要在其旁边添加一个滚动条,以便可以滚动按钮。

我遇到的问题是,条的内部“移动部分”与整个滚动条一样大,并且无法移动,我使用 var myData = { "0": [ { "id": 50, "product_id": "blah blah", "etc" : 44 }, { "id": 52, "product_id": "blah blah", "etc" : 44 }, { "id": 50, "product_id": "blah blah", "etc" : 44 } ], "1": [ { "id": 50, "product_id": "blah blah", "etc" : 44 }, { "id": 52, "product_id": "blah blah", "etc" : 44 }, { "id": 50, "product_id": "blah blah", "etc" : 44 } ], "2": [ { "id": 50, "product_id": "blah blah", "etc" : 44 }, { "id": 52, "product_id": "blah blah", "etc" : 44 }, { "id": 50, "product_id": "blah blah", "etc" : 44 } ] } console.log(Object.keys(myData).length) // => 3解决了这个问题,但即使那样酒吧的酒吧对画布没有任何影响。

这是我从程序中提取的相应代码:

scollregion=(0,0,1000,1000)

(如您所见),即使我将import Tkinter as tk root = tk.Tk() root.rowconfigure(0, weight=1) root.columnconfigure(0, weight=50) root.columnconfigure(1, weight=1) root.minsize(300,400) root.maxsize(300,400) #Buttons buttonFrame = tk.Canvas(root, bg='#bbb') buttonFrame.grid(row=0, column=0, sticky=tk.N+tk.E+tk.S+tk.W) buttonFrame.columnconfigure(0, weight=1) scroll = tk.Scrollbar(root, command=buttonFrame.yview) scroll.grid(row=0, column=1, sticky=tk.N+tk.E+tk.S+tk.W) buttonFrame.configure(yscrollcommand=scroll.set) for i in range(30): tk.Button(buttonFrame, text=str(i+1)).grid(row=i, column=0, sticky=tk.N+tk.E+tk.S+tk.W) root.mainloop() 挤压在画布上的某个位置,也无法移动滑块,也不会改变画布上的任何内容。

2个问题: a。)我需要添加(或删除)什么,以便可以滚动浏览按钮列表 b。)进行以下修复:当使滚动条成为scrollregion=(bla)而不是buttonFrame的子代时,滚动条仍然可以工作吗?

1 个答案:

答案 0 :(得分:1)

要将小部件添加到画布,必须使用create_window方法,而不是grid()。然后,您必须在设置滚动区域之前更新画布。

for i in range(30):
    btn = tk.Button(buttonFrame, text=str(i+1))
    buttonFrame.create_window((100,i*50), window=btn)
root.update()
buttonFrame.config(scrollregion=buttonFrame.bbox("all"))

如果您尝试我怀疑不是您想要的东西,因为create_window方法需要绝对定位(您不能使用网格或打包)。这就是为什么大多数人将“框架”放入“画布”中,然后向其中添加其小部件的原因。许多人已经抽象出了这个人造框架,它实际上是另一个框架including me中的画布中的框架。