2017-12-18 369 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

哦!這正是我想要做的。萬分感謝。我會用你的技術來做我的項目。 –