滚动条在 python tkinter 中不起作用
Scroll bar not working in python tkinter
我正在尝试制作 100 个条目小部件。它应该使用垂直滚动条滚动。由于 frame 没有滚动条选项,我使用 canvas。但是当我添加 Entry 小部件时,滚动条不起作用。谁能帮我解决我犯的错误。
我的代码:
from tkinter import *
root=Tk()
frame=Frame(root,width=300,height=300)
frame.grid(row=0,column=0)
canvas=Canvas(frame,width=300,height=300,scrollregion=(0,0,500,500))
for _ in range(100):
Entry(canvas).pack()
vbar=Scrollbar(frame,orient=VERTICAL)
vbar.pack(side=RIGHT,fill=Y)
vbar.config(command=canvas.yview)
canvas.config(yscrollcommand=vbar.set)
canvas.pack(side=LEFT,expand=True,fill=BOTH)
root.mainloop()
A Canvas 只能滚动通过 .create_window()
添加的子窗口小部件。通过 .pack()
添加的子小部件基本上位于 Canvas 之上,不受其控制。
请注意 .create_window()
与 .place()
几何管理器大致相似:坐标完全由您决定,因此您必须以某种方式知道 space 之间的距离您的 Entry 小部件,这将根据每个系统上使用的确切字体而有所不同。将单个框架直接添加到 Canvas,然后将所有 Entry 小部件打包到其中可能会更好 - 这给了你自动调整大小的好处,同时仍然允许滚动。
我正在尝试制作 100 个条目小部件。它应该使用垂直滚动条滚动。由于 frame 没有滚动条选项,我使用 canvas。但是当我添加 Entry 小部件时,滚动条不起作用。谁能帮我解决我犯的错误。
我的代码:
from tkinter import *
root=Tk()
frame=Frame(root,width=300,height=300)
frame.grid(row=0,column=0)
canvas=Canvas(frame,width=300,height=300,scrollregion=(0,0,500,500))
for _ in range(100):
Entry(canvas).pack()
vbar=Scrollbar(frame,orient=VERTICAL)
vbar.pack(side=RIGHT,fill=Y)
vbar.config(command=canvas.yview)
canvas.config(yscrollcommand=vbar.set)
canvas.pack(side=LEFT,expand=True,fill=BOTH)
root.mainloop()
A Canvas 只能滚动通过 .create_window()
添加的子窗口小部件。通过 .pack()
添加的子小部件基本上位于 Canvas 之上,不受其控制。
请注意 .create_window()
与 .place()
几何管理器大致相似:坐标完全由您决定,因此您必须以某种方式知道 space 之间的距离您的 Entry 小部件,这将根据每个系统上使用的确切字体而有所不同。将单个框架直接添加到 Canvas,然后将所有 Entry 小部件打包到其中可能会更好 - 这给了你自动调整大小的好处,同时仍然允许滚动。