2013-03-19 33 views
1

我在Tkinter.Canvas上创建了多个对象。这里的问题是有些对象会从画布中走出来。如何扩展画布以显示所有对象,即使使用滚动条? 这里是我使用的示例代码:如何在放置对象时展开Canvas?

from Tkinter import * 
root = Tk() 
f=Frame(root) 
f.grid() 
w=Canvas(f) 
line1=w.create_line(50,50,150,150, width=5) 
line2=w.create_line(100,100,100,350, width=3) 
line3=w.create_line(150,150,150,450, width=3) 
w.grid(row=0, column=0) 
u=Frame(f) 
u.grid(row=0, column=1) 
root.mainloop() 

这里line2line3都出了画布。

回答

1

你必须创建两个Scrollbar S和它们设置为画布的xscrollcommandyscrollcommand选项。然后,当您将scrollregion配置为最大宽度和高度时,如果需要,scollbars会增长。

如果这个非常基本的实现来替代你的代码的Canvas,你会看到的结果是:

from Tkinter import * 

class ScrollableCanvas(Canvas): 
    def __init__(self, master, *args, **options): 
     self.frame = Frame(master) 
     Canvas.__init__(self, self.frame, *args, **options) 
     self.xscrollbar = Scrollbar(self.frame, command=self.xview, orient=HORIZONTAL) 
     self.yscrollbar = Scrollbar(self.frame, command=self.yview) 
     self.config(xscrollcommand=self.xscrollbar.set, yscrollcommand=self.yscrollbar.set) 
    def create_line(self, *args, **options): 
     Canvas.create_line(self, args, **options) 
     self._resize(*args) 
    def _resize(self, *args): 
     maxwidth = max(args[0], args[2], int(self['width'])) 
     maxheight = max(args[1], args[3], int(self['height'])) 
     self.config(scrollregion=(0, 0, maxwidth, maxheight)) 
    def grid(self, *args, **options): 
     self.frame.grid(*args, **options) 
     Canvas.grid(self, row=0, column=0) 
     self.xscrollbar.grid(row=1, column=0, sticky=E+W) 
     self.yscrollbar.grid(row=0, column=1, sticky=N+S) 
1

只要指定你想要的大小,当您创建Canvas对象:

w=Canvas(f, width=200, height=500) 

或者,您也可以重新配置很多小部件他们通过他们的config()方法创建后:

w.config(width=200, height=500) 

这里什么一些documentation我发现说:

在w看看小部件,我们来看看它们的一些常用属性(如大小,颜色和字体)是如何指定的。

•每个控件都有一组影响其外观的选项和 行为属性,例如字体,颜色,尺寸,文本标签和 等。

•使用 关键字参数,如text='PANIC!'height=20调用控件的构造函数时,您可以指定选项。

•创建小部件后,您可以稍后使用小部件的.config()方法更改 的任何选项。您可以使用小部件的.cget()方法检索当前的任何选项的 设置。

+0

如果我解决我的帧大小将帆布滚动? – lokesh 2013-03-19 11:02:31

+0

如果您创建并将某些['scrollbar'](http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/scrollbar.html)窗口小部件连接到它将使用的画布。 – martineau 2013-03-19 11:15:22

相关问题