Python Tkinter:将滚动条与画布相结合
我知道这不是第一次有人问这样的问题,但即使在浏览了大约两个小时的互联网后,我也无法让它工作: 所以我试图创建一个Tkinter框架,它包含几个按钮,就像我举的30个例子一样。但是因为我的程序没有足够的空间,我需要在它旁边添加一个滚动条,这样就可以滚动按钮了 我遇到的问题是,滚动条的内部移动部分与整个滚动条一样大,无法移动,我使用scollregion=0,010001000解决了这个问题,但即使这样,滚动条的移动对画布也没有任何影响 下面是我从程序中提取的相应代码:Python Tkinter:将滚动条与画布相结合,python,tkinter,scrollbar,python-2.x,Python,Tkinter,Scrollbar,Python 2.x,我知道这不是第一次有人问这样的问题,但即使在浏览了大约两个小时的互联网后,我也无法让它工作: 所以我试图创建一个Tkinter框架,它包含几个按钮,就像我举的30个例子一样。但是因为我的程序没有足够的空间,我需要在它旁边添加一个滚动条,这样就可以滚动按钮了 我遇到的问题是,滚动条的内部移动部分与整个滚动条一样大,无法移动,我使用scollregion=0,010001000解决了这个问题,但即使这样,滚动条的移动对画布也没有任何影响 下面是我从程序中提取的相应代码: import Tkinter
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()
正如您希望看到的,滑块甚至不能移动,也不会改变画布上的任何内容,即使我在其中的某个地方挤压了一个scrollregion=bla
2个问题:
A.我需要添加或删除什么,以便滚动浏览按钮列表
B从a。当我将滚动条设置为buttonFrame的子对象而不是根对象时,仍然可以工作?要将小部件添加到画布,必须使用create\u 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方法需要绝对定位,您不能使用grid或pack。这就是为什么大多数人在画布上放置一个框架,并将他们的小部件添加到其中。许多人已经抽象出这个人造框架,它实际上是另一个框架中画布上的一个框架。Ok。以你为例,我使它发挥了作用。非常感谢。