Python Tkinter 画布 xview 单位

5 投票
2 回答
11795 浏览
提问于 2025-04-16 22:27

在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()

撰写回答