Python Tkinter 画布 xview 单位
在Tkinter的画布滚动方法中,'单位'(what
)是怎么定义的呢?比如在xview(SCROLL, step, what)
和yview(SCROLL, step, what)
这两个方法里,它是用像素来定义的吗?我们能不能改变这个单位(比如让滚动变得慢一些)?
想要更好地理解,可以查看这个代码 这里。
提前谢谢你。
2 个回答
5
看看关于 -xview/-yview 选项的文档,特别是 yscrollincrement 这个选项。没错,你可以改变滚动的步长。
-yscrollincrement
这个选项用来设置垂直滚动的增量,增量的单位可以是屏幕距离的常用形式。如果这个选项的值大于零,那么窗口中的垂直视图会被限制,使得窗口顶部的画布 y 坐标总是 yScrollIncrement 的偶数倍;而且,滚动的单位(比如当你点击滚动条的上下箭头时视图的变化)也会是 yScrollIncrement。如果这个选项的值小于或等于零,那么垂直滚动就没有限制了。
还有
yview 滚动数字 什么
这个命令根据数字和什么来调整窗口中的视图向上或向下。数字必须是整数,而什么必须是 units 或 pages。如果是什么是 units,视图会根据 yScrollIncrement 的单位向上或向下调整(前提是它大于零),否则会以窗口高度的十分之一为单位调整。如果是什么是 pages,那么视图会以窗口高度的九分之九为单位调整。如果数字是负数,那么会显示更高的信息;如果是正数,则会显示更低的信息。
以上内容摘自 Tk 的手册页面,关于 canvas。
11
如果你想让滚动变得更慢,可以试着调整Canvas的xscrollincrement和yscrollincrement这两个选项:
from Tkinter import *
root = Tk()
c = Canvas(root, scrollregion=(0,0,500,500), height=200, width=200)
s = Scrollbar(root, command=c.yview)
c.pack(side=LEFT)
s.pack(side=RIGHT, fill=Y)
c.configure(yscrollcommand=s.set)
c.configure(yscrollincrement='2')
##yscrollincrement - increment for vertical scrolling, in pixels,
##millimeters '2m', centimeters '2c', or inches '2i'
c.create_rectangle(10,10,100,100)
c.create_rectangle(10,200,100,300)
def rollWheel(event):
direction = 0
if event.num == 5 or event.delta == -120:
direction = 1
if event.num == 4 or event.delta == 120:
direction = -1
event.widget.yview_scroll(direction, UNITS)
c.bind('<MouseWheel>', lambda event: rollWheel(event))
c.bind('<Button-4>', lambda event: rollWheel(event))
c.bind('<Button-5>', lambda event: rollWheel(event))
c.focus_set()
root.mainloop()