1

我正在创建多个对象Tkinter.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不在画布上。

4

2 回答 2

1

Canvas只需在创建对象时指定所需的大小:

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

config()或者,您可以在通过其方法创建许多小部件后重新配置它们:

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

这是我找到的一些文档所说的:

在我们查看这些小部件之前,让我们先看看它们的一些常见属性(例如大小、颜色和字体)是如何指定的。

• 每个小部件都有一组影响其外观和行为的选项——字体、颜色、大小、文本标签等属性。

• 您可以在使用关键字参数(例如text='PANIC!'or )调用小部件的构造函数时指定选项height=20

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

于 2013-03-19T10:42:42.067 回答
1

您必须创建两个Scrollbars 并将它们设置为画布的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)
于 2013-03-19T19:21:47.033 回答