您好,登錄后才能下訂單哦!
本篇內容主要講解“Python turtle繪圖的基礎知識點有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Python turtle繪圖的基礎知識點有哪些”吧!
Turtle 庫是 Python 內置的圖形化模塊,屬于標準庫之一,位于 Python 安裝目錄的 lib 文件夾下,常用函數有以下幾種:
畫布是turtle用于繪圖區域,我們可以設置它的大小和初始位置。
turtle.screensize(canvwidth=None, canvheight=None, bg=None)
,參數分別對應畫布的寬(單位像素), 高, 背景顏色。
turtle.screensize(1000,800, "blue") turtle.screensize() #返回默認大小(500, 400) turtle.setup(width=0.5, height=0.75, startx=None, starty=None)
width, height: 輸入寬和高為整數時, 表示像素; 為小數時, 表示占據電腦屏幕的比例,(startx, starty): 這一坐標表示矩形窗口左上角頂點的位置, 如果為空,則窗口位于屏幕中心。
在畫布上,默認有一個坐標原點為畫布中心的坐標軸,坐標原點上有一只面朝x軸正方向小烏龜。這里我們描述小烏龜時使用了兩個詞語:坐標原點(位置),面朝x軸正方向(方向), turtle繪圖中,就是使用位置方向描述小烏龜(畫筆)的狀態。
turtle.pensize() # 設置畫筆的寬度; turtle.pencolor()# 沒有參數傳入,返回當前畫筆顏色,傳入參數設置畫筆顏色,可以是字符串如"green", "red",也可以是RGB 3元組。 turtle.speed(speed)#設置畫筆移動速度,畫筆繪制的速度范圍[0,10]整數,數字越大越快。
畫筆運動命令代碼
turtle.forward(distance)—向當前畫筆方向移動distance像素長度
turtle.backward(distance)—向當前畫筆相反方向移動distance像素長度
turtle.right(degree)—順時針移動degree° turtle.left(degree)—逆時針移動degree°
turtle.pendown()—移動時繪制圖形,缺省時也為繪制 turtle.goto(x,y)—將畫筆移動到坐標為x,y的位置
turtle.penup()—提起筆移動,不繪制圖形,用于另起一個地方繪制
turtle.circle()—畫圓,半徑為正(負),表示圓心在畫筆的左邊(右邊)畫圓 setx( )—將當前x軸移動到指定位置
sety( )—將當前y軸移動到指定位置 setheading(angle)—設置當前朝向為angle角度
home()—設置當前畫筆位置為原點,朝向東 dot®—繪制一個指定直徑和顏色的圓點
畫筆控制命令代碼
turtle.fillcolor(colorstring)—繪制圖形的填充顏色 turtle.color(color1,color2)—同時設置pencolor=color1, fillcolor=color2
turtle.filling()—返回當前是否在填充狀態 turtle.begin_fill()—準備開始填充圖形
turtle.end_fill()—填充完成 turtle.hideturtle()—隱藏畫筆的turtle形狀
turtle.showturtle()—顯示畫筆的turtle形狀
全局控制命令代碼
turtle.clear()—清空turtle窗口,但是turtle的位置和狀態不會改變
turtle.reset()—清空窗口,重置turtle狀態為起始狀態 turtle.undo()—撤銷上一個turtle動作
turtle.isvisible()—返回當前turtle是否可見 stamp()—復制當前圖形
turtle.write(s[,font=(“fontname”,font_size,“font_type”)])—文本,s為文本內容,font是字體的參數,分別為字體名稱,大小和類型;font為可選項,font參數也是可選項
from turtle import * from random import * from math import * def tree(n, l): pd () # 下筆 # 陰影效果 t = cos ( radians ( heading () + 45 ) ) / 8 + 0.25 pencolor ( t, t, t ) pensize ( n / 3 ) forward ( l ) # 畫樹枝 if n > 0: b = random () * 15 + 10 # 右分支偏轉角度 c = random () * 15 + 10 # 左分支偏轉角度 d = l * (random () * 0.25 + 0.7) # 下一個分支的長度 # 右轉一定角度,畫右分支 right ( b ) tree ( n - 1, d ) # 左轉一定角度,畫左分支 left ( b + c ) tree ( n - 1, d ) # 轉回來 right ( c ) else: # 畫葉子 right ( 90 ) n = cos ( radians ( heading () - 45 ) ) / 4 + 0.5 ran = random () # 這里相比于原來隨機添加了填充的圓圈,讓櫻花葉子看起來更多一點 if (ran > 0.7): begin_fill () circle ( 3 ) fillcolor ( 'pink' ) # 把原來隨機生成的葉子換成了統一的粉色 pencolor ( "pink" ) circle ( 3 ) if (ran > 0.7): end_fill () left ( 90 ) # 添加0.3倍的飄落葉子 if (random () > 0.7): pu () # 飄落 t = heading () an = -40 + random () * 40 setheading ( an ) dis = int ( 800 * random () * 0.5 + 400 * random () * 0.3 + 200 * random () * 0.2 ) forward ( dis ) setheading ( t ) # 畫葉子 pd () right ( 90 ) n = cos ( radians ( heading () - 45 ) ) / 4 + 0.5 pencolor ( n * 0.5 + 0.5, 0.4 + n * 0.4, 0.4 + n * 0.4 ) circle ( 2 ) left ( 90 ) pu () # 返回 t = heading () setheading ( an ) backward ( dis ) setheading ( t ) pu () backward ( l ) # 退回 bgcolor ( 0.956, 0.9255, 0.9882 ) # 設置背景色(把灰色換成淡紫色) ht () # 隱藏turtle speed ( 0 ) # 速度 1-10漸進,0 最快 tracer ( 0, 0 ) pu () # 抬筆 backward ( 50 ) left ( 90 ) # 左轉90度 pu () # 抬筆 backward ( 300 ) # 后退300 tree ( 12, 100 ) # 遞歸7層 done ()
from turtle import * import turtle t = Turtle() t.pensize(2) turtle.bgcolor("black") colors = ["red", "yellow", 'purple', 'blue'] t._tracer(False) for x in range(400): for y in range(200): t.forward(x * y) t.color(colors[x % 4]) t.left(91) t._tracer(True) done()
import turtle turtle.penup() turtle.pencolor("blue") turtle.forward(-200) turtle.pendown() turtle.pensize(10) turtle.right(45) for i in range(4): turtle.circle(40, 100) turtle.circle(-40, 60) turtle.circle(40, 80 / 2) turtle.fd(30) turtle.circle(16, 150) turtle.fd(100) turtle.done()
import time import turtle as t t.pensize(4) # 設置畫筆的大小 t.colormode(255) # 設置GBK顏色范圍為0-255 t.color((255,155,192),"pink") # 設置畫筆顏色和填充顏色(pink) t.setup(840,500) # 設置主窗口的大小為840*500 t.speed(10) # 設置畫筆速度為10 #鼻子 t.pu() # 提筆 t.goto(-100,100) # 畫筆前往F坐標(-100,100) t.pd() # 下筆 t.seth(-30) # 筆的角度為-30° t.begin_fill() # 外形填充的開始標志 a=0.4 for i in range(120): if 0 <= i < 30 or 60 <= i < 90: a=a+0.08 t.lt(3) #向左轉3度 t.fd(a) #向前走a的步長 else: a=a-0.08 t.lt(3) t.fd(a) t.end_fill() # 依據輪廓填充 t.pu() # 提筆 t.seth(90) # 筆的角度為90度 t.fd(25) # 向前移動25 t.seth(0) # 轉換畫筆的角度為0 t.fd(10) t.pd() t.pencolor(255,155,192) # 設置畫筆顏色 t.seth(10) t.begin_fill() t.circle(5) # 畫一個半徑為5的圓 t.color(160,82,45) # 設置畫筆和填充顏色 t.end_fill() t.pu() t.seth(0) t.fd(20) t.pd() t.pencolor(255,155,192) t.seth(10) t.begin_fill() t.circle(5) t.color(160,82,45) t.end_fill() #頭 t.color((255,155,192),"pink") t.pu() t.seth(90) t.fd(41) t.seth(0) t.fd(0) t.pd() t.begin_fill() t.seth(180) t.circle(300,-30) # 順時針畫一個半徑為300,圓心角為30°的園 t.circle(100,-60) t.circle(80,-100) t.circle(150,-20) t.circle(60,-95) t.seth(161) t.circle(-300,15) t.pu() t.goto(-100,100) t.pd() t.seth(-30) a=0.4 for i in range(60): if 0<=i<30 or 60<=i<90: a=a+0.08 t.lt(3) #向左轉3度 t.fd(a) #向前走a的步長 else: a=a-0.08 t.lt(3) t.fd(a) t.end_fill() #耳朵 t.color((255,155,192),"pink") t.pu() t.seth(90) t.fd(-7) t.seth(0) t.fd(70) t.pd() t.begin_fill() t.seth(100) t.circle(-50,50) t.circle(-10,120) t.circle(-50,54) t.end_fill() t.pu() t.seth(90) t.fd(-12) t.seth(0) t.fd(30) t.pd() t.begin_fill() t.seth(100) t.circle(-50,50) t.circle(-10,120) t.circle(-50,56) t.end_fill() #眼睛 t.color((255,155,192),"white") t.pu() t.seth(90) t.fd(-20) t.seth(0) t.fd(-95) t.pd() t.begin_fill() t.circle(15) t.end_fill() t.color("black") t.pu() t.seth(90) t.fd(12) t.seth(0) t.fd(-3) t.pd() t.begin_fill() t.circle(3) t.end_fill() t.color((255,155,192),"white") t.pu() t.seth(90) t.fd(-25) t.seth(0) t.fd(40) t.pd() t.begin_fill() t.circle(15) t.end_fill() t.color("black") t.pu() t.seth(90) t.fd(12) t.seth(0) t.fd(-3) t.pd() t.begin_fill() t.circle(3) t.end_fill() #腮 t.color((255,155,192)) t.pu() t.seth(90) t.fd(-95) t.seth(0) t.fd(65) t.pd() t.begin_fill() t.circle(30) t.end_fill() #嘴 t.color(239,69,19) t.pu() t.seth(90) t.fd(15) t.seth(0) t.fd(-100) t.pd() t.seth(-80) t.circle(30,40) t.circle(40,80) #身體 t.color("red",(255,99,71)) t.pu() t.seth(90) t.fd(-20) t.seth(0) t.fd(-78) t.pd() t.begin_fill() t.seth(-130) t.circle(100,10) t.circle(300,30) t.seth(0) t.fd(230) t.seth(90) t.circle(300,30) t.circle(100,3) t.color((255,155,192),(255,100,100)) t.seth(-135) t.circle(-80,63) t.circle(-150,24) t.end_fill() #手 t.color((255,155,192)) t.pu() t.seth(90) t.fd(-40) t.seth(0) t.fd(-27) t.pd() t.seth(-160) t.circle(300,15) t.pu() t.seth(90) t.fd(15) t.seth(0) t.fd(0) t.pd() t.seth(-10) t.circle(-20,90) t.pu() t.seth(90) t.fd(30) t.seth(0) t.fd(237) t.pd() t.seth(-20) t.circle(-300,15) t.pu() t.seth(90) t.fd(20) t.seth(0) t.fd(0) t.pd() t.seth(-170) t.circle(20,90) #腳 t.pensize(10) t.color((240,128,128)) t.pu() t.seth(90) t.fd(-75) t.seth(0) t.fd(-180) t.pd() t.seth(-90) t.fd(40) t.seth(-180) t.color("black") t.pensize(15) t.fd(20) t.pensize(10) t.color((240,128,128)) t.pu() t.seth(90) t.fd(40) t.seth(0) t.fd(90) t.pd() t.seth(-90) t.fd(40) t.seth(-180) t.color("black") t.pensize(15) t.fd(20) # 尾巴 t.pensize(4) t.color((255,155,192)) t.pu() t.seth(90) t.fd(70) t.seth(0) t.fd(95) t.pd() t.seth(0) t.circle(70,20) t.circle(10,330) t.circle(70,30)
# coding=utf-8 # code by me # 引用海龜庫以及隨機庫 import turtle as t import random import time light = t.Turtle(visible=False) wind = t.Turtle(visible=False) def canvas(size_x=1200, size_y=900): # 設置畫布,有默認值 t.setup(size_x, size_y) # 設置線的顏色以及size def pencil(size=5, color="black"): t.pensize(size) t.pencolor(color) def sun(): # 繪制太陽 light.pensize(5) light.pencolor("black") sec = int(time.time()) t.penup() # 畫紅色點 t.goto(-530, 310) t.pendown() t.dot(100, "red") for i in range(1, 19): # 陽光效果 light.penup() light.goto(-530, 310) light.seth(i * 20) light.forward(55) light.pendown() if (i + sec) % 2 == 1: light.forward(15) else: light.forward(7) def plant(): # 繪制天空以及大地 t.penup() # 每個繪制函數開頭都寫了這個,防止龜龜繪制另外的圖像移動時留下痕跡 length = 900 * 0.318 # 將畫布的縱向黃金分割 t.home() t.goto(600, -450) t.fillcolor("#DAA520") # 分割填充大地 t.begin_fill() t.left(90) t.forward(length) t.left(90) t.forward(1200) t.left(90) t.forward(length) t.left(90) t.forward(1200) t.end_fill() t.home() # 填充天空 t.goto(600, length - 450) t.fillcolor("#B0C4DE") t.begin_fill() t.left(90) t.forward(900 - length) t.left(90) t.forward(1200) t.left(90) t.forward(900 - length) t.left(90) t.forward(1200) t.end_fill() def butterfly(pos_x=0, pos_y=0): # 繪制蝴蝶,這里會隨機生成位置以及蝴蝶大小、顏色 light.penup() light.goto(pos_x, pos_y) light.pendown() light.pensize(2) light.seth(45) color = ["#FF00FF", "#87CEFA", "#0000EE", "#FF4500", "#00FF00", "#00E5EE", "#FFFAFA"] # 一個顏色表,以及size表 size = [6, 7, 8, 9, 10, 11, 12] tep_size = random.choice(size) light.fillcolor(random.choice(color)) light.begin_fill() light.circle(tep_size, 270) # 繪制翅膀 light.right(135) light.pensize(3) light.forward(tep_size / 2) light.right(45) light.forward(tep_size / 2) light.back(tep_size / 2) light.left(70) light.forward(tep_size / 2) light.back(tep_size / 2) light.right(25) light.pensize(4) light.back(2.05 * tep_size) light.seth(-90) light.pensize(2) light.circle(tep_size, -180) light.pensize(4) light.left(90) light.forward(tep_size * 2) light.back(tep_size * 2.5) light.end_fill() def botany(pos_x=0, pos_y=0, direction=0, flower=1, bend=10): # 植物函數,繪制向日葵,向日葵會迎風倒,效果很到位 light.pensize(3) light.pencolor("black") light.penup() light.goto(pos_x, pos_y) light.pendown() light.left(90) light.fillcolor("#00CD00") light.begin_fill() light.circle(50, 90) # 繪制葉片 light.left(90) light.circle(50, 90) light.penup() light.goto(pos_x, pos_y) light.pendown() light.seth(-90) light.pensize(6) light.forward(50) light.back(50) light.pensize(3) light.circle(50, -90) light.right(90) light.circle(50, -90) light.end_fill() if flower: # 判斷是否有花,這里默認有花 light.penup() light.goto(pos_x, pos_y) light.pendown() light.pensize(4) if direction: light.seth(80) # 繪制稈 light.circle(130 - 5 * bend, 70 + 5 * bend, None) else: light.seth(-80) light.circle(130 - 5 * bend, -70 - 5 * bend, None) light.right(180) tep_x, tep_y = light.xcor(), light.ycor() light.forward(13) light.right(30) for i in range(6): # 繪制花瓣 light.fillcolor("#FFD700") light.begin_fill() light.circle(15, 300) light.left(120) light.end_fill() light.goto(tep_x, tep_y) light.dot(36, "#FFB90F") def cloud(pos_x=0, pos_y=0, size=20): # 繪制云 pos = int(time.time()) pos %= 50 light.penup() # 云沒有要邊框,所以沒有pendown light.goto(pos*8+pos_x, pos_y) light.fillcolor("#E6E6FA") light.begin_fill() light.seth(-80) light.circle(size, 110) for i in range(1, 6): # 繪制下半部分 light.right(100) light.circle(size, 110) light.left(120) for i in range(1, 7): # 繪制上半部分,上邊進行了六次循環,但是之前就進行了一次繪制,這里有七次循環 light.right(100) light.circle(size, 110) light.end_fill() # def draw(x, y): # 這里是之前調試用的拖拽函數響應函數,不需使用 # t.goto(x, y) # print(t.xcor(), t.ycor()) # def person(pos_x=0, pos_y=0): # 繪制人的函數,效果很拉跨,舍棄 # t.penup() # t.goto(pos_x, pos_y) # t.pendown() # # t.dot(44, "#FFDEAD") # t.right(90) # t.penup() # t.forward(25) # t.right(15) # t.pendown() # pencil(10) # t.forward(50) # # t.right(35) # t.forward(50) # t.back(50) # t.left(90) # t.forward(27) # t.right(110) # t.forward(23) # # t.penup() # t.goto(pos_x, pos_y) # t.seth(-90) # t.forward(25) # t.right(15) # t.forward(20) # t.right(60) # t.pendown() # t.forward(50) # tep_x1, tep_y1 = t.xcor(), t.ycor() # t.back(50) # t.right(160) # t.forward(30) # t.seth(90) # t.forward(20) # # t.penup() # t.goto(tep_x1, tep_y1) # t.seth(-145) # pencil(6) # t.pendown() # t.forward(50) # t.right(90) # t.forward(20) # t.right(90) # t.forward(15) # t.right(90) # t.forward(20) # t.left(90) # t.forward(150) def star(pos_x=0, pos_y=0, size=10): # 繪制星星函數 color = ["#FFFFE0", "#FFFF00"] light.penup() light.goto(pos_x, pos_y) angle = random.randint(0, 180) light.seth(angle) light.fillcolor(random.choice(color)) light.begin_fill() for i in range(5): # 這個144度是查的資料 light.right(144) light.forward(size) light.end_fill() def wind(): # 風函數,讓圖像看起來更有感覺,就是一條直線,加兩個圓 pos = int(time.time()) pos %= 5 color = ["#D3D3D3", "#CDCDB4"] tep_color = random.choice(color) light.penup() light.goto(pos*80-1000, 50) light.seth(0) light.pendown() light.pensize(5) light.pencolor(tep_color) light.forward(500) light.pensize(4) light.pencolor(tep_color) light.left(45) light.circle(50, 180) light.pensize(3) light.pencolor(tep_color) light.circle(30, 90) tep_color = random.choice(color) light.penup() # 畫圈圈 light.goto(pos*140-1040, 80) light.seth(0) light.pendown() light.pensize(5) light.pencolor(tep_color) light.forward(400) light.pensize(4) light.pencolor(tep_color) light.left(45) light.circle(40, 180) light.pensize(3) light.pencolor(tep_color) light.circle(25, 90) def lie(): # 這個函數是表達我對python的喜愛 t.penup() t.goto(0, -360) pencil(0, "#FFA54F") t.write("節日快樂", align='center', font=('arial', 75, 'normal')) t.hideturtle() def dynamic(): light.clear() sun() star(200, 200) # 右上角有星星注意觀察 0.0 star(260, 230, 15) star(180, 300) star(300, 100, 15) star(500, 290) star(420, 310, 15) star(300, 200) star(260, 230, 15) star(350, 352) star(500, 180, 15) star(560, 352) cloud(-530, 280, 20) cloud(300, 250, 30) wind() bend = int(time.time()) bend %= 5 bend += 14 light.seth(-100-bend) # 初始向日葵葉片角度 for i in range(14): # 生成向日葵 if i % 2 == 0: botany(-520 + i * 50, -132, 0, 1, bend - i) botany(-340 + i * 50, -132, 0, 1, bend - i) else: botany(-430 + i * 50, -142, 0, 1, bend - i) botany(-230 + i * 50, -142, 0, 1, bend - i) pos_x = [45, -96, -100, 410, 300, 580, 230, -50, -400, -320, -212] pos_y = [45, -96, -100, 0, 20, 30, 29, -50, -20, -43, 10] for i in range(6): # 生成蝴蝶,這里便于觀察到結果,蝴蝶有點大 butterfly(random.choice(pos_x), random.choice(pos_y)) t.ontimer(dynamic, 1000) def piant(): # 這里是將繪制全放在這個函數里,讓main看起來簡潔 t.tracer(False) t.delay(0) canvas() pencil() plant() lie() dynamic() if __name__ == "__main__": piant() # t.ondrag(draw, btn=1, add=None) t.mainloop()
到此,相信大家對“Python turtle繪圖的基礎知識點有哪些”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。