Canvas滚动测试
没试过canvas的滚动功能,参照一个样例做个测试例子。
主要是设置滚动区,如果没设置的话,滚动不受限制,设置的话,
滚动区就像一个方轴在一个方孔(画布范围)内左右上下动,
到达边界就干涉停止了,这是我的认识。
滚动后按a加了根线,是为了测试一下是否原来的原点是否变动。
这个原点原来在画布左上角,随着移动原点就不再是左上角了,
感觉就像cad里一样,画布就像一个视口,图形和坐标系整体移动,
不管怎么动都不会影响图形,这只是视图的操作。
另外,用负坐标好像也没问题。
#!/usr/bin/env python
# -*- coding:gb2312 -*-
from tkinter import *
class App:
def __init__(self):
self.root = Tk()
self.root.title('Canvas滚动测试...')
self.frm = Frame(self.root)
self.frm.pack()
self.cvs = Canvas(self.frm, width=800, height=600, bg='black', scrollregion=(50,50,400,300) )#
self.cvs.grid(row=0, column=0, sticky='WESN')
self.cvs.create_rectangle(0,0,800,600, outline='green', dash=(4,4) ) # 画布范围
self.cvs.create_rectangle(50,50,400,300, outline='green', dash=(4,4) ) # 滚动区范围
self.cvs.create_line(-30,-50,300,300, fill='green')
# 用方向键翻页键控制滚动
self.cvs.bind('<Left>', lambda event: self.cvs.xview_scroll(-1,'units') )
self.cvs.bind('<Right>', lambda event: self.cvs.xview_scroll(1,'units') )
self.cvs.bind('<Up>', lambda event: self.cvs.yview_scroll(-1,'units') )
self.cvs.bind('<Down>', lambda event: self.cvs.yview_scroll(1,'units') )
self.cvs.bind('<Prior>', lambda event: self.cvs.yview_scroll(-1,'pages') )
self.cvs.bind('<Next>', lambda event: self.cvs.yview_scroll(1,'pages') )
self.cvs.bind('a', lambda event: self.cvs.create_line(0,0,400,300, fill='green') ) # a滚动后加线测试
self.cvs.bind('x', lambda event: self.cvs.xview_moveto(0.0) ) # x回归原位
self.cvs.bind('y', lambda event: self.cvs.yview_moveto(0.0) ) # y回归原位
self.cvs.bind('f', lambda event: self.cvs.config( scrollregion=(0,0,800,600) ) ) # f全部归位测试
self.cvs.bind('c', lambda event: self.cvs.config( scrollregion=() ) ) # 清滚动区
self.cvs.focus_set()
def Run(self):
self.root.mainloop()
app = App()
app.Run()