整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          python海龜繪圖turtle(三):繪圖命令

          python海龜繪圖turtle(三):繪圖命令

          龜繪圖(turtle)是python的一個有趣的內置模塊,是python語言的標準庫之一,是入門級的圖形繪制函數庫。

          turtle通過一組函數控制畫筆的行進動作,進而繪制形狀,這些函數命令分別是:畫筆控制方法、方向控制方法和全局控制方法。

          一、畫筆控制方法

          抬筆

          penup()、pu()、up()

          畫筆抬起,移動時不繪制圖形

          落筆

          pendown()、pd()、down()

          畫筆落下,移動時繪制圖形,缺省時也為畫筆落下

          定位

          goto(x,y)、setpos(x,y)、setposition(x,y)

          將畫筆移動到坐標為x,y的位置由當前坐標前往指定坐標,這里使用絕對坐標,但畫筆方向不會改變


          二、方向控制方法

          前進

          forward(s)、

          fd(s)

          海龜前進s指定的距離,方向為海龜的朝向。

          后退

          backward(s)、bk(s)、back(s)

          海龜后退s指定的距離,方向與海龜的朝向相反。不改變海龜的朝向。

          改變

          方向

          setheading

          (angle)、

          seth(angle)

          以絕對角度改變方向

          左轉

          left(angle)、

          lt(angle)

          海龜左轉 angle 個單位。(單位默認為角度,但可通過 degrees() 和 radians() 函數改變設置。)

          右轉

          right(angle)、

          rt(angle)

          海龜右轉 angle 個單位。(單位默認為角度,但可通過 degrees() 和 radians() 函數改變設置。)

          畫圓

          circle(r,angle)

          以畫筆(海龜)左側為圓心,半徑為r像素,畫angle度的圓形。注意:海龜方向同時發生angle度變化

          畫圓

          畫弧

          circle(radius, extent=None, steps=None)

          繪制一個 radius 指定半徑的圓。圓心在海龜左邊 radius 個單位;extent 為一個夾角,用來決定繪制圓的一部分。如未指定 extent則繪制整個圓。如果extent 不是完整圓周,則以當前畫筆位置為一個端點繪制圓弧。如果 radius 為正值則朝逆時針方向繪制圓弧,否則朝順時針方向。最終海龜的朝向會依據 extent 的值而改變。


          三、 全局控制方法

          清空

          clear()

          清空窗口,但是turtle的位置和狀態不會改變

          重置

          reset()

          清空窗口,重置turtle狀態為起始狀態

          撤消

          undo()

          撤消 (或連續撤消) 最近的一個 (或多個) 海龜動作??沙废拇螖涤沙废彌_區的大小決定。

          印章

          stamp()

          在海龜當前位置印制一個海龜形狀。返回該印章的 stamp_id,印章可以通過調用 clearstamp(stamp_id) 來刪除。

          文本

          write(arg,

          move, align="left", font=("fonnt-ame",font-size,"font-type"))

          寫文本,arg為文本內容,moveo 可選參數,用于指定是否移動畫筆到文本的右下角,默認為False (不移動)。

          align:可選參數,用于指定文字的對齊方式,其參數值為left(居左)、center(居中)或者right(居右)中的任意一個,默認為left。

          font:可選參數,用于指定字體、字號和字形,通過一個三元組(字體,字號,字形)指定

          停止

          done()

          暫停程序,停止畫筆繪制, 等待用戶操作,窗口不自動關閉。是海龜繪圖程序中的最后一個語句。

          四、其他的一些特殊方法

          更多函數可以通過官方文檔查看:https://docs.python.org/3/library/turtle.html

          css3之前,并沒有直接的設置元素圓角的屬性,那如何實現設計圖中的圓角設定呢?

          如:表單demo中的文本框圓角。



          一般通過在PS 軟件中截取上左、上右、下左、下右四個邊角的圓角圖片,通過background-position背景圖屬性設定位置,從而實現圓角的設定。

          或是將四個圓角圖片當做四個img標簽,通過position定位屬性找尋設定的位置,如:


          通過圖片設定圓角


          在IE6、7、8還比較盛行的時候,如果要兼容到IE瀏覽器,需要使用CSS hack兼容IE瀏覽器版本,高級瀏覽器可以直接使用border-radius屬性設定圓角,對低版本瀏覽器使用圖片定位的方式實現設計圖呈現。但隨著近幾年瀏覽器版本的不斷更新迭代,我們需要做的就是,如果需要兼容低版本瀏覽器,只需保證呈現正常即可,無需過分的追求展示效果與設計圖的還原度。但實現的思想在web布局中是很重要的。


          近在看自己的頭條權益的時候,看到這個信用分圖片,出于職業的好奇心,研究一下這個半環圖的畫法。

          實現這個半圓圖,有兩種方案。第一種方案,走css路線,首先畫一個整的圓環,通過兩塊擋板的旋轉展現出一部分的環形。第二種方案,通過canvas畫圖實現半環圖。我認為還是第二種方案更好實現。今天我就教大家如何使用canvas實現這個圖。

          首先創建一個html文件。在<body></body>標簽里創建一個canvas標簽,定義一下畫布的大小。

          <!DOCTYPE html>
          <html lang="en">
          <head>
          <meta charset="UTF-8">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <meta http-equiv="X-UA-Compatible" content="ie=edge">
          <title>score</title>
          <style>
          #score{
          background: #333;
          border-radius: 5px;
          }
          </style>
          </head>
          <body>
          <canvas id="score" width="300" height="300" data-score='100'>
          <span>你的瀏覽器不支持canvas元素,換個瀏覽器試試吧</span>
          </canvas>
          </body>
          </html>

          然后開始寫js,在canvas標簽里畫圓弧。

          var c=document.getElementById('score');
          var ctx=c.getContext("2d");
          var value=c.attributes['data-score'].value;
          
          const x0=150; // 圓心坐標
          const y0=155;// 圓心坐標
          const r1=130; // 外圓半徑
          const startAng=145; // 起始角度
          const endAng=35;
          
          // 根據半徑和角度判斷x軸坐標
          function getPointX(r, ao) {
          return x0 + r * Math.cos(ao * Math.PI / 180)
          }
          
          // 根據半徑和角度判斷Y軸坐標
          function getPointY(r, ao) {
          return y0 + r * Math.sin(ao * Math.PI / 180)
          }
          
          // 底層的圓弧 無色
          ctx.beginPath();
          ctx.arc(x0, y0, r1, (Math.PI / 180) * startAng, (Math.PI / 180) * endAng, false);
          ctx.strokeStyle="#666";
          ctx.lineWidth=10;
          ctx.lineCap='round'; // 線的末端設置
          ctx.stroke();

          在瀏覽器打開,出現的效果如下:


          圓環已經初見成效。興奮,激動,哈哈。這個圓弧是底層圓弧,是不會變動的。接下來畫第二層圓弧,可以隨著信用分變動的部分。上js代碼

          // 畫外層的圓弧 有色,可變動
          var blueAng=145+(250/100)*value; // 這里的value是可以根據信用分控制的
          ctx.beginPath();
          ctx.arc(x0, y0, r1, (Math.PI / 180) *startAng, (Math.PI / 180) * blueAng, false);
          var linearGradient=ctx.createLinearGradient(0,0,250,0);
          linearGradient.addColorStop(0,'#F6E259');
          linearGradient.addColorStop(1,'#F4ECB6');
          ctx.strokeStyle=linearGradient;
          ctx.lineWidth=9;
          ctx.lineCap='round'; // 線的末端設置
          ctx.stroke();

          請看效果圖:


          然后就是填充中間的文字,js代碼如下:

          // canvas中間的文
          ctx.font="normal 80px PingFangSC-Medium"; // 字體大小,樣式
          ctx.fillStyle="#E8DA77";; // 顏色
          ctx.textAlign='center'; // 位置
          ctx.textBaseline='middle';
          ctx.moveTo(150, 155); // 文字填充位置
          ctx.fillText(value, 150, 310/2-30);
          ctx.font="normal 14px PingFangSC-Regular"; // 字體大小,樣式
          ctx.fillStyle="#E8DA77"; // 顏色
          ctx.fillText("評估于06-01 16:18:03", 150, 180);

          效果露一下?。?/p>


          說了這么多,附上完整代碼,你可以直接粘貼復制看看效果。

          <!DOCTYPE html>
          <html lang="en">
          <head>
          <meta charset="UTF-8">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <meta http-equiv="X-UA-Compatible" content="ie=edge">
          <title>score</title>
          <style>
          #score{
          background: #333;
          border-radius: 5px;
          }
          </style>
          </head>
          <body>
          <canvas id="score" width="300" height="300" data-score='96'>
          <span>你的瀏覽器不支持canvas元素,換個瀏覽器試試吧</span>
          </canvas>
          </body>
          </html>
          <script>
          var c=document.getElementById('score');
          var ctx=c.getContext("2d");
          var value=c.attributes['data-score'].value;
          
          const x0=150; // 圓心坐標
          const y0=155;// 圓心坐標
          const r1=130; // 外圓半徑
          const startAng=145; // 起始角度
          const endAng=35;
          
          // 根據半徑和角度判斷x軸坐標
          function getPointX(r, ao) {
          return x0 + r * Math.cos(ao * Math.PI / 180)
          }
          
          // 根據半徑和角度判斷Y軸坐標
          function getPointY(r, ao) {
          return y0 + r * Math.sin(ao * Math.PI / 180)
          }
          
          // 底層的圓弧 無色
          ctx.beginPath();
          ctx.arc(x0, y0, r1, (Math.PI / 180) * startAng, (Math.PI / 180) * endAng, false);
          ctx.strokeStyle="#666";
          ctx.lineWidth=10;
          ctx.lineCap='round'; // 線的末端設置
          ctx.stroke();
          
          // 畫外層的圓弧 有色,可變動
          var blueAng=145+(250/100)*value; // 這里的value是可以根據信用分控制的
          ctx.beginPath();
          ctx.arc(x0, y0, r1, (Math.PI / 180) *startAng, (Math.PI / 180) * blueAng, false);
          var linearGradient=ctx.createLinearGradient(0,0,250,0);
          linearGradient.addColorStop(0,'#F6E259');
          linearGradient.addColorStop(1,'#F4ECB6');
          ctx.strokeStyle=linearGradient;
          ctx.lineWidth=9;
          ctx.lineCap='round'; // 線的末端設置
          ctx.stroke();
          
          // canvas中間的文字
          ctx.font="normal 80px PingFangSC-Medium"; // 字體大小,樣式
          ctx.fillStyle="#E8DA77";; // 顏色
          ctx.textAlign='center'; // 位置
          ctx.textBaseline='middle';
          ctx.moveTo(150, 155); // 文字填充位置
          ctx.fillText(value, 150, 310/2-30);
          ctx.font="normal 14px PingFangSC-Regular"; // 字體大小,樣式
          ctx.fillStyle="#E8DA77"; // 顏色
          ctx.fillText("評估于06-01 16:18:03", 150, 180);
          
          // 下方0和100的位置
          ctx.fillText("0", 46, 250);
          ctx.fillText("100", 250, 250);
          </script>

          附:

          ctx.arc(x0, y0, r1, (Math.PI / 180) * startAng, (Math.PI / 180) * endAng, false);

          這個括號里有五個參數,分別是:圓心的x軸坐標,圓心的y軸坐標,圓環的起始點角度,圓環的終點角度,順時針與否(true或者false)。


          喜歡的話,歡迎點贊支持!


          主站蜘蛛池模板: 精品深夜AV无码一区二区| 91视频一区二区| 狠狠色婷婷久久一区二区三区| 无码一区二区三区AV免费| 少妇激情av一区二区| 无码一区二区三区在线观看| 中文字幕亚洲一区| 一区二区视频传媒有限公司| 精品日韩在线视频一区二区三区| 国产主播一区二区三区在线观看| 内射少妇一区27P| 激情爆乳一区二区三区| 日本视频一区二区三区| 日韩毛片一区视频免费| 国产福利电影一区二区三区久久久久成人精品综合 | 综合久久久久久中文字幕亚洲国产国产综合一区首 | 日韩人妻无码一区二区三区 | 久久免费国产精品一区二区| 国产精品亚洲一区二区三区在线| 国产午夜福利精品一区二区三区 | 亚洲午夜精品一区二区公牛电影院 | 中文字幕一区二区人妻| 日韩电影一区二区| 在线欧美精品一区二区三区| 午夜视频一区二区三区| 一区二区三区日本电影| 亚洲色无码一区二区三区| 麻豆亚洲av熟女国产一区二| 亚洲AV无码国产精品永久一区| 女人18毛片a级毛片一区二区| 国产一区二区精品久久岳√| 亚洲爽爽一区二区三区| 无码人妻品一区二区三区精99| 国产免费一区二区三区| 国产一区二区三区视频在线观看| 中文字幕在线视频一区| 久久久精品人妻一区二区三区蜜桃 | 国产伦一区二区三区高清 | 乱精品一区字幕二区| 国产麻豆精品一区二区三区v视界| 久久精品亚洲一区二区|