我知道这不是第一次提出这样的问题,但是即使经过大约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
的子代时,滚动条仍然可以工作吗?
答案 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中的画布中的框架。