2017-12-18 380 views
0

我有一个关于L-系统的项目。我试图添加一张打印L系统的乌龟;但是,与文本字段不同,画布不会展开。当我打印更多文本时,我的文本字段使用滚动条进行扩展。然而,乌龟卡在画布上。我很困难。Python画布不能自动扩展为龟打印

frame2 = tki.Frame(frame, bg='yellow', width=810, height=510) 
frame2.pack() 
frame2.place(x=500,y=5) 
cv = Canvas(frame2, width=2000, height=2000) 
cv.place(x=0, y=0) 

screen = turtle.TurtleScreen(cv) 
t = turtle.RawTurtle(screen) 

hbar=Scrollbar(frame2,orient=HORIZONTAL) 
hbar.pack(side=BOTTOM,fill=X) 
hbar.config(command=cv.xview) 
vbar=Scrollbar(frame2,orient=VERTICAL) 
vbar.pack(side=RIGHT,fill=Y) 
vbar.config(command=cv.yview) 
cv.config(width=800,height=500) 
cv.config(xscrollcommand=hbar.set, yscrollcommand=vbar.set) 
cv.pack(side=LEFT,expand=True,fill=BOTH) 
+0

不使用'包()'和'地方()'在同一时间 - 他们是两个不同的“布局管理器” – furas

+0

产生最小工作例如我们可以运行它并查看你的问题。 – furas

+0

canas不会扩展,因为它没有此功能 - 您可能必须手动执行此操作。 – furas

回答

1

如果我正确理解你的问题,为什么不乌龟库提供了对您为此工作ScrolledCavas

编辑:我已经在帧大小开始画布大小和加入ScrolledCanvasreset()方法来扩大动态画布:

import tkinter as tk 
from turtle import TurtleScreen, RawTurtle, ScrolledCanvas 

size = 100 
canvsize = 300 

root = tk.Tk() 
root.geometry('600x500') 

frame = tk.Frame(root, width=300, height=300) 
frame.pack() 
frame.place(x=50, y=50) 

canvas = ScrolledCanvas(frame, canvwidth=canvsize, canvheight=canvsize) 
canvas.pack(side=tk.LEFT) 

screen = TurtleScreen(canvas) 
screen.bgcolor('yellow') 

turtle = RawTurtle(screen, visible=False) 
turtle.dot(size, "green") 

def expand(): 
    global canvsize, size 

    if size < 800: 
     size += 10 
     if size > canvsize: 
      canvsize += 100 
      canvas.reset(canvwidth=canvsize, canvheight=canvsize) 

     turtle.dot(size, "green") 
     screen.ontimer(expand, 100) 

screen.ontimer(expand, 100) 

screen.mainloop() 
+0

谢谢你你的时间。你非常接近我的意思。问题是我想观察点数从100增加到800.换句话说,我想创建一个没有滚动条的屏幕,但是当龟开始打印并尝试超过帧大小时,帧应该用滚动条展开。就像一个文本框... –

+0

@VuralErdogan,我重写了它,所以它最初没有滚动条,但随着图像扩展超过了框架的水平和垂直边缘而添加它们。可能不完美,但很简单,只使用龟'ScrolledCanvas'。 – cdlane

+0

哦!这正是我想要做的。万分感谢。我会用你的技术来做我的项目。 –