Tkinter。滚动条在Canvas上不起作用

时间:2019-12-26 07:44:16

标签: python tkinter

我是编程新手,请不要讨厌我:)

为什么滚动在我的画布小部件上不起作用? 我添加了具有30行的循环,但无法向下滚动。 它看起来像是由于create_text()方法或可能不是。 我在下面编写了示例代码。

from tkinter import *

root = Tk()
root.geometry('200x150')
frame = Frame(root)

yscrollbar = Scrollbar(frame, orient=VERTICAL)
yscrollbar.pack(fill=Y, side=RIGHT)

canvas = Canvas(frame,
                yscrollcommand=yscrollbar.set,
                bg='white')
canvas.pack(fill=BOTH)
yscrollbar.config(command=canvas.yview)

n=12
for i in range(1,31):
    canvas.create_text(10,n,text=i)
    n+=12

frame.pack()
root.mainloop()

my code

1 个答案:

答案 0 :(得分:1)

滚动没有响应,因为您需要告诉画布将滚动限制到给定区域。

您可以使用bbox方法来获取给定对象或一组对象的边界框。

canvas.bbox(ALL)返回画布上所有对象的边界框。

链接:http://effbot.org/zone/tkinter-scrollbar-patterns.htm,您可以在此链接中查看其他方法来做到这一点

这是工作代码:

from tkinter import *

root = Tk()
root.geometry('200x150')
frame = Frame(root)

yscrollbar = Scrollbar(frame, orient=VERTICAL)
yscrollbar.pack(fill=Y, side=RIGHT)

canvas = Canvas(frame,
                yscrollcommand=yscrollbar.set,
                bg='white')
canvas.pack(fill=BOTH)
yscrollbar.config(command=canvas.yview)

n=12
for i in range(1,31):
    canvas.create_text(10,n,text=i)
    n+=12

frame.pack()

# Add this line to tell the canvas the area over to scroll
canvas.config(scrollregion=canvas.bbox(ALL))

root.mainloop()