1. 程式人生 > >python學習筆記 turtle類使用

python學習筆記 turtle類使用

一、匯入
匯入方式一:

from turtle import *

這種方式匯入的話,可以在檔案中直接使用該庫的所有的方法。
例如:(設定一個300*300,畫筆在100*100的位置上,畫一個圓)

from turtle import *
setup(300,300,100,100)//設定介面為300*300
pensize(2)
pencolor('blue')
circle(30)
mainloop()

匯入方式二:

import turtle

如上的例子,這種匯入的方式的寫法如下

import turtle
t=turtle.Turtle()
turtle.setup(300,300,300,100)
t.pensize(2
) t.pencolor('blue') t.circle(30) turtle.mainloop()

其中,turtle.Turtle()是一個畫筆的物件。
有關繪製和設定畫筆相關的就是畫筆的屬性。
turtle.setup和turtle.mainloop設定的是畫布的屬性。

二方法介紹
畫布的方法:
setup(width,height,floatx,floaty)設定繪製區域

繪製開始前呼叫tracer(False)
繪製結束之後tracer(True)
這個方法是直接展示給使用者繪製結果,無需漫長的等待繪製過程,這個方法turtle裡有,turle.Turtle裡面也有,效果是一樣的。

register_shape(name,shape) & addshape(name,shape)
原始碼

addshape = register_shape

所以這兩個方法實際上是一樣的。
註冊一個圖形
使用:

import turtle

t=turtle.Turtle()

turtle.setup(300,300,300,100)
t.pensize(2)
t.pencolor('blue')
turtle.tracer(False)
t.penup()
t.begin_poly()#開始記錄多邊形的頂點
for i in range(6):
    t.forward(100
) t.right(60) t.end_poly() #獲取多邊形 shape=t.get_poly() #註冊多邊形 turtle.register_shape("shape",shape) t.pendown() t.shape('shape')#繪製這個圖形 turtle.tracer(True) turtle.mainloop()

shape 繪製的圖形

bgcolor(color) 設定螢幕的背景顏色
eg:turtle.bgcolor(‘red’)

bgpic(picname)設定螢幕背景圖案
ps:這個還未設定成功,日後在試

mode(mode)畫筆的起始方向
預設為standard,正東方向
logo 正北方向
world 世界座標系,這種方式不太懂
原始碼寫著:

'world' uses userdefined 'worldcoordinates'. *Attention*: in
        this mode angles appear distorted if x/y unit-ratio doesn't equal 1.
        If mode is not given, return the current mode.

意思是:
如果x / y單位比例不等於1,則這種模式角度會出現扭曲。應該是跟地球投影相類似的

ontimer(fun,t=0)定時器,定時執行fun函式

title(title)設定視窗的標題
bye() 銷燬螢幕上的物件
原始碼:

    def _destroy(self):
        root = self._root
        if root is _Screen._root:
            Turtle._pen = None
            Turtle._screen = None
            _Screen._root = None
            _Screen._canvas = None
        TurtleScreen._RUNNING = False
        root.destroy()

    def bye(self):
        """Shut the turtlegraphics window.

        Example (for a TurtleScreen instance named screen):
        >>> screen.bye()
        """
        self._destroy()

呼叫bye函式之後,就不能呼叫畫筆了
eg:

turtle.bye()
t.circle(60)

執行之後:

Traceback (most recent call last):
  File "E:/python/myturtle.py", line 540, in <module>
    t.circle(60)
  File "D:\Python27\lib\lib-tk\turtle.py", line 1903, in circle
    self.speed(0)

clearscreen()清除螢幕中繪製的東西
colormode(mode)設定畫筆的顏色的表示方式
mode的值只能是1和255
預設mode=1畫筆顏色的設定如下任一種都可以:

t.pencolor('red')
t.pencolor('#aeffff')

當然如果mode=255的時候,以上兩種設定依然生效。
mode=255的時候可以呼叫t.pencolor(r,g,b)的方法,如下所示:

t.pencolor(24,2,255)

但是上面的方法在mode=1的時候是不允許呼叫的。
delay(t) 設定畫筆延遲時間,其實跟ontimer類似,只不過ontimer有指定自己的繪製函式,而delay呼叫的是turtle內部的繪製函式。
原始碼:

    def delay(self, delay=None):
        """ Return or set the drawing delay in milliseconds.

        Optional argument:
        delay -- positive integer

        Example (for a TurtleScreen instance named screen):
        >>> screen.delay(15)
        >>> screen.delay()
        15
        """
        if delay is None:
            return self._delayvalue
        self._delayvalue = int(delay)

delay內部將delay給了_delayvalue ,我們再看下這個值,其實是TurtleScreen裡的屬性。這個值在_update裡使用.

 def _update(self):
        """Perform a Turtle-data update.
        """
        screen = self.screen
        if screen._tracing == 0:
            return
        elif screen._tracing == 1:
            self._update_data()
            self._drawturtle()
            screen._update()                  # TurtleScreenBase
            screen._delay(screen._delayvalue) # TurtleScreenBase
        else:
            self._update_data()
            if screen._updatecounter == 0:
                for t in screen.turtles():
                    t._drawturtle()
                screen._update()


    def _delay(self, delay):
        """Delay subsequent canvas actions for delay ms."""
        self.cv.after(delay)

然後看下ontimer函式

 def _ontimer(self, fun, t):
        """Install a timer, which calls fun after t milliseconds.
        """
        if t == 0:
            self.cv.after_idle(fun)
        else:
            self.cv.after(t, fun)

exitonclick()點選螢幕退出

畫筆的方法:
pensize(size)設定畫筆大小
pencolor(color)設定畫筆顏色
seth(angle)設定畫筆的方向
正東方向逆時針0-360
circle(rad,angele)rad圓的半徑,為正在半徑的左邊,為負在半徑的右邊
angle 繪製的角度值 360為一個圓
fd(rad)向前直線爬行距離rad
penup()畫筆擡起
pendown()畫筆放下
begin_poly() & end_poly() 一組
記錄多邊形路徑
get_poly()獲取記錄的多邊形
shapesize(stretch_wid,stretch_len,outline)設定圖形的大小,引數:寬度拉伸,長度拉伸,圖形寬度
resizemode(rmode)設定影象大小模式
引數rmode的值:“auto”適應畫筆的外觀對應於pensize的值。
“user”按照適應畫筆的外觀 stretchfactor和outlinewidth(outline)的值, 這是由shapesize()設定的。通過呼叫具有引數的shapeize來呼叫
“noresize”畫筆的外觀不適應

持續整理中…