Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tkinter:将滚动条与画布相结合_Python_Tkinter_Scrollbar_Python 2.x - Fatal编程技术网

Python Tkinter:将滚动条与画布相结合

Python Tkinter:将滚动条与画布相结合,python,tkinter,scrollbar,python-2.x,Python,Tkinter,Scrollbar,Python 2.x,我知道这不是第一次有人问这样的问题,但即使在浏览了大约两个小时的互联网后,我也无法让它工作: 所以我试图创建一个Tkinter框架,它包含几个按钮,就像我举的30个例子一样。但是因为我的程序没有足够的空间,我需要在它旁边添加一个滚动条,这样就可以滚动按钮了 我遇到的问题是,滚动条的内部移动部分与整个滚动条一样大,无法移动,我使用scollregion=0,010001000解决了这个问题,但即使这样,滚动条的移动对画布也没有任何影响 下面是我从程序中提取的相应代码: import Tkinter

我知道这不是第一次有人问这样的问题,但即使在浏览了大约两个小时的互联网后,我也无法让它工作:

所以我试图创建一个Tkinter框架,它包含几个按钮,就像我举的30个例子一样。但是因为我的程序没有足够的空间,我需要在它旁边添加一个滚动条,这样就可以滚动按钮了

我遇到的问题是,滚动条的内部移动部分与整个滚动条一样大,无法移动,我使用scollregion=0,010001000解决了这个问题,但即使这样,滚动条的移动对画布也没有任何影响

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

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。以你为例,我使它发挥了作用。非常感谢。