gpt4 book ai didi

python - 当我在 Canvas 上放置对象时如何扩展 Canvas ?

转载 作者:行者123 更新时间:2023-12-01 05:47:52 24 4
gpt4 key购买 nike

我正在 Tkinter.Canvas 上创建多个对象。这里的问题是一些对象超出了 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 不在 Canvas 之外。

最佳答案

您必须创建两个Scrollbar并将它们设置为 Canvas 的xscrollcommandyscrollcommand选项。然后,当您使用最大宽度和高度配置 scrollregion 时,滚动条将根据需要增长。

如果您用这个极其基本的实现替换代码的 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)

关于python - 当我在 Canvas 上放置对象时如何扩展 Canvas ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15497025/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com