摘要:啥是佩奇已不重要。佩奇是他用搜集的所有信息,一點(diǎn)一滴的用心創(chuàng)造編織愛(ài)的過(guò)程。畫(huà)佩奇的代碼已經(jīng)上傳到后臺(tái),公眾號(hào)后臺(tái)回復(fù)社會(huì)人即可獲取。
“你告訴爺爺你需要什么東西呀,爺爺給你準(zhǔn)備,佩奇,什么是佩奇呀?”...
這是一個(gè)發(fā)生在大山里的故事,但故事的情節(jié)所有人都不會(huì)陌生??爝^(guò)年了,在農(nóng)村爺爺給城里的孫子打電話,孫子說(shuō)想要“佩奇”,為了滿足孩子的心愿,爺爺開(kāi)始滿村子找佩奇…
當(dāng)除夕夜家人團(tuán)聚,爺爺開(kāi)始展示愛(ài)心禮物,“硬核佩奇”的出現(xiàn),驚呆眾人高能反轉(zhuǎn),別出心裁的愛(ài)跨越了隔代距離,成功博得孫子歡心。
啥是佩奇?已不重要。佩奇是他用搜集的所有信息,一點(diǎn)一滴的用心創(chuàng)造、編織愛(ài)的過(guò)程。佩奇是對(duì)孫子的關(guān)愛(ài)、佩奇是對(duì)團(tuán)圓的企盼。
看著爺爺滿村子找佩奇,鼻子有點(diǎn)酸,作為程序猿我想用Python來(lái)告訴爺爺,啥是佩奇?用python做一個(gè)社會(huì)人,這是很久之前的一篇文章,Turtle是自己接觸python之后用到的第一個(gè)庫(kù),Trutle這個(gè)庫(kù)很有意思,很容易得到滿足感,學(xué)習(xí)完以后自己隨手畫(huà)了一個(gè)佩奇,佩奇當(dāng)時(shí)沒(méi)火沒(méi)想到今天火了。畫(huà)佩奇的代碼已經(jīng)上傳到后臺(tái),公眾號(hào)后臺(tái)回復(fù)【社會(huì)人】即可獲取。今天的文章再次給大家介紹一下Turtle,用它來(lái)畫(huà)高級(jí)一點(diǎn)的東西,話不多說(shuō)我們開(kāi)始吧。
程序介紹
在Python中有很多編寫(xiě)圖形程序的方法,一個(gè)簡(jiǎn)單的啟動(dòng)圖形化程序設(shè)計(jì)的方法是使用Python內(nèi)嵌的Turtle模塊。Turtle是Python內(nèi)嵌的繪制線、圓以及其他形狀(包括文本)的圖形模塊。它很容易學(xué)習(xí)并且使用簡(jiǎn)單。
一個(gè)Turtle實(shí)際上是一個(gè)對(duì)象,在導(dǎo)入Turtle模塊時(shí),就創(chuàng)建了對(duì)象,然后,可以調(diào)用Turtle對(duì)象的各種方法完成不同的操作。
當(dāng)創(chuàng)建一個(gè)Turtle對(duì)象時(shí),它的位置被設(shè)定在(0,0)處——窗口的中心,而且它的方向被設(shè)置為向右。Turtle模塊用筆來(lái)繪制圖形。默認(rèn)情況下,筆是向下的(就像真實(shí)的筆尖觸碰著一張紙)。如果筆是向下的,那么當(dāng)移動(dòng)Turtle的時(shí)候,它就會(huì)繪制出一條從當(dāng)前位置到新位置的線。
今天我們要畫(huà)的是一個(gè)可以獲取當(dāng)前時(shí)間的鐘表。
具體實(shí)現(xiàn)
因?yàn)殓姳磔喞惺怯袔讉€(gè)小黑點(diǎn)的,那么我們首先需要設(shè)置畫(huà)筆的動(dòng)作,抬起畫(huà)筆向前一段距離以后再放下
1def Skip(step):
2 turtle.penup()
3 turtle.forward(step)
4 turtle.pendown()
注冊(cè)Turtle的形狀,建立一個(gè)表針Turtle,同時(shí)記錄多邊形起點(diǎn)和終點(diǎn)。(當(dāng)前的烏龜位置是多邊形的第一個(gè)頂點(diǎn),多邊形的最后一個(gè)頂點(diǎn)將與第一個(gè)頂點(diǎn)相連)返回最后記錄的多邊形。
1def mkHand(name, length):
2 turtle.reset()
3 Skip(-length * 0.1)
4 turtle.begin_poly()
5 turtle.forward(length * 1.1)
6 turtle.end_poly()
7 handForm = turtle.get_poly()
8 turtle.register_shape(name, handForm)
因?yàn)殓姳碛腥齻€(gè)指針,現(xiàn)在需要建立三個(gè)表針Turtle并初始化,同時(shí)還需要建立一個(gè)輸出文字的Turtle
1def Init():
2 global secHand, minHand, hurHand, printer
3 turtle.mode("logo")
4 mkHand("secHand", 135)
5 mkHand("minHand", 125)
6 mkHand("hurHand", 90)
7 secHand = turtle.Turtle()
8 secHand.shape("secHand")
9 minHand = turtle.Turtle()
10 minHand.shape("minHand")
11 hurHand = turtle.Turtle()
12 hurHand.shape("hurHand")
13
14 for hand in secHand, minHand, hurHand:
15 hand.shapesize(1, 1, 3)
16 hand.speed(10)
17
18
19 printer = turtle.Turtle()
20 printer.hideturtle()
21 printer.penup()
現(xiàn)在需要定義時(shí)間格式
1def Week(t):
2 week = ["星期一", "星期二", "星期三",
3 "星期四", "星期五", "星期六", "星期日"]
4 return week[t.weekday()]
5
6
7def Date(t):
8 y = t.year
9 m = t.month
10 d = t.day
11 return "%s %d%d" % (y, m, d)
繪制指針的動(dòng)態(tài)顯示
1def Tick():
2
3 t = datetime.today()
4 second = t.second + t.microsecond * 0.000001
5 minute = t.minute + second / 60.0
6 hour = t.hour + minute / 60.0
7 secHand.setheading(6 * second)
8 minHand.setheading(6 * minute)
9 hurHand.setheading(30 * hour)
10
11 turtle.tracer(False)
12 printer.forward(65)
13 printer.write(Week(t), align="center",
14 font=("Courier", 14, "bold"))
15 printer.back(130)
16 printer.write(Date(t), align="center",
17 font=("Courier", 14, "bold"))
18 printer.home()
19 turtle.tracer(True)
20
21 # 100ms后繼續(xù)調(diào)用tick
22 turtle.ontimer(Tick, 100)
現(xiàn)在是重頭戲了,繪制鐘表的輪廓,這的主要邏輯就是一個(gè)循環(huán),不難于理解。
1def SetupClock(radius):
2 turtle.reset()
3 turtle.pensize(7)
4 for i in range(60):
5 Skip(radius)
6 if i % 5 == 0:
7 turtle.forward(20)
8 Skip(-radius - 20)
9
10 Skip(radius + 20)
11 if i == 0:
12 turtle.write(int(12), align="center", font=("Courier", 14, "bold"))
13 elif i == 30:
14 Skip(25)
15 turtle.write(int(i / 5), align="center", font=("Courier", 14, "bold"))
16 Skip(-25)
17 elif (i == 25 or i == 35):
18 Skip(20)
19 turtle.write(int(i / 5), align="center", font=("Courier", 14, "bold"))
20 Skip(-20)
21 else:
22 turtle.write(int(i / 5), align="center", font=("Courier", 14, "bold"))
23 Skip(-radius - 20)
24 else:
25 turtle.dot(5)
26 Skip(-radius)
27 turtle.right(6)
寫(xiě)在最后
學(xué)習(xí)就是舉一反三,希望你可以用turtle畫(huà)出更有意思的東西來(lái)。
鐘表的完整代碼需要后臺(tái)回復(fù)【鐘表】獲取
【推薦閱讀】
致青春--Python實(shí)現(xiàn)俄羅斯方塊
【Python爬蟲(chóng)】Urllib的使用(2)
【LeetCode】貪心算法--劃分字母區(qū)間(763)
機(jī)器學(xué)習(xí)實(shí)戰(zhàn)--住房月租金預(yù)測(cè)(3)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/73077.html
摘要:啥是佩奇已不重要。佩奇是他用搜集的所有信息,一點(diǎn)一滴的用心創(chuàng)造編織愛(ài)的過(guò)程。畫(huà)佩奇的代碼已經(jīng)上傳到后臺(tái),公眾號(hào)后臺(tái)回復(fù)社會(huì)人即可獲取。 你告訴爺爺你需要什么東西呀,爺爺給你準(zhǔn)備,佩奇,什么是佩奇呀?... 這是一個(gè)發(fā)生在大山里的故事,但故事的情節(jié)所有人都不會(huì)陌生。快過(guò)年了,在農(nóng)村爺爺給城里的孫子打電話,孫子說(shuō)想要佩奇,為了滿足孩子的心愿,爺爺開(kāi)始滿村子找佩奇… 當(dāng)除夕夜家人團(tuán)聚,爺爺開(kāi)...
摘要:所以一開(kāi)始讓我看小豬佩奇的時(shí)候我是拒絕的,因?yàn)槟悴荒茏屛铱?,我就馬上去看,第一我要試一下。其實(shí)這道題對(duì)于真正看了小豬佩奇的人來(lái)說(shuō)是送分題,就看是不是真的看了。這里說(shuō)的都是類(lèi),這也正是小豬佩奇的構(gòu)圖精髓,一種手繪風(fēng)格,而不是標(biāo)準(zhǔn)刻板的線條。 歡迎大家前往騰訊云+社區(qū),獲取更多騰訊海量技術(shù)實(shí)踐干貨哦~ 作者:江志耿 | 騰訊TEG網(wǎng)絡(luò)工程師 我是佩奇,哼,這是我的弟弟喬治,呱呱,這是我的媽...
摘要:主要有以下幾個(gè)步驟找一張小豬喬治的圖片參考對(duì)圖片中的部分進(jìn)行分解,并逐一實(shí)現(xiàn)廢話其實(shí)掌握了后,這些步驟都不難了,細(xì)心繪制就可以完成啦。我繪制的小豬喬治如圖參考資料用畫(huà)小豬佩奇,你就是下一個(gè)社會(huì)人 概述 之前看了一篇關(guān)于用CSS來(lái)畫(huà)小豬佩奇的文章,抱著鍛煉自己的心態(tài)造了個(gè)輪子,畫(huà)了個(gè)佩奇的小弟喬治,效果可以看這里,源碼在這里。 開(kāi)發(fā)過(guò)程中也讓我對(duì)border-radius這個(gè)屬性有了更深...
摘要:于是乎,我建立了這個(gè)項(xiàng)目,收錄一些有趣的小程序,便于閱讀和思考。下面是一些列舉一些有趣的內(nèi)容這是來(lái)自編程從入門(mén)到實(shí)踐中的一個(gè)小游戲。用語(yǔ)言實(shí)現(xiàn)的編譯器。做的小博客,持續(xù)開(kāi)發(fā)中這個(gè)項(xiàng)目還在不斷豐富中,如果你有什么有趣的分享,歡迎聯(lián)系我。 紙上得來(lái)終覺(jué)淺,絕知此事要躬行。 這本書(shū)或這個(gè)視頻看完了,我可以做點(diǎn)什么?編程難道只是命令行打印些東西?該找點(diǎn)什么適合練手的項(xiàng)目來(lái)練習(xí)練習(xí)呢? 我想可能...
摘要:每天一個(gè)社會(huì)人實(shí)現(xiàn)效果想法之前看到一篇博客,使用繪制出了小豬佩奇,所以自己想試一試,采用純繪制出低配版的小豬佩奇。在布局上,沒(méi)有堅(jiān)持嵌套,導(dǎo)致縮放時(shí)位置錯(cuò)位,如果想實(shí)行縮放一致,可采用小豬的頭部嵌套布局實(shí)現(xiàn)。 每天一個(gè)CSS-社會(huì)人 實(shí)現(xiàn)效果 showImg(https://segmentfault.com/img/remote/1460000016461611?w=667&h=620...
閱讀 3607·2021-10-09 09:41
閱讀 2799·2021-10-08 10:18
閱讀 2252·2021-09-10 10:51
閱讀 2737·2021-09-10 10:50
閱讀 853·2021-09-09 09:33
閱讀 3467·2021-09-06 15:14
閱讀 3091·2019-08-30 11:06
閱讀 3313·2019-08-29 14:04