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


评论
©appall | Powered by LOFTER