最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用Python代碼實(shí)現(xiàn)模擬動(dòng)態(tài)指針時(shí)鐘

 更新時(shí)間:2023年04月10日 16:41:51   作者:逃逸的卡路里  
這篇文章主要為大家詳細(xì)介紹了如何利用python和C++代碼實(shí)現(xiàn)模擬動(dòng)態(tài)指針時(shí)鐘,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下

一、python代碼實(shí)現(xiàn)及turtle庫簡(jiǎn)單介紹

桌面時(shí)鐘項(xiàng)目描述

1、使用turtle庫繪制時(shí)鐘外形及表針;

2、使用datetime獲取系統(tǒng)時(shí)間;

3、時(shí)鐘動(dòng)態(tài)顯示

turtle庫基本命令

1、turtle.setup()函數(shù):用于啟動(dòng)一個(gè)圖形窗口,它有四個(gè)參數(shù)turtle.setup(width, height, startx, starty)分別是:?jiǎn)?dòng)窗口的寬度和高度表示窗口啟動(dòng)時(shí),窗口左上角在屏幕中的坐標(biāo)位置。

2、turtle.pensize()函數(shù):表示小烏龜運(yùn)動(dòng)軌跡的寬度。

3、turtle.pencolor()函數(shù):表示小烏龜運(yùn)動(dòng)軌跡的顏色。它包含一個(gè)輸入?yún)?shù),這里我們把它設(shè)為藍(lán)色,blue,其他顏色單詞也可以使用。Turtle采用RGB方式來定義顏色,如果希望獲得和圖片中顏色一致的小蛇,請(qǐng)輸入turtle.pencolor(“#3B9909”)

4、turtle.seth(angle)函數(shù):表示小烏龜啟動(dòng)時(shí)運(yùn)動(dòng)的方向。它包含一個(gè)輸入?yún)?shù),是角度值。0表示向東,90度向北,180度向西,270度向南;負(fù)值表示相反方向。程序中,我們讓小烏龜向-40度啟動(dòng)爬行,即:向東南方向40度。

5、turtle.circle()函數(shù):讓小烏龜沿著一個(gè)圓形爬行,參數(shù)rad描述圓形軌跡半徑的位置,這個(gè)半徑在小烏龜運(yùn)行的左側(cè),rad遠(yuǎn)位置處。如果 rad為負(fù)值,則半徑在小烏龜運(yùn)行的右側(cè), 參數(shù)angle表示小烏龜沿著圓形爬行的弧度值。

6、turtle.fd()函數(shù):表示烏龜向前直線爬行移動(dòng)表示小烏龜向前直線爬行移動(dòng),它有一個(gè)參數(shù)表示爬行的距離

datetime模塊函數(shù)

1.datetime.date:表示日期的類,返回year-month-day

2.datetime.datetime:表示日期時(shí)間的類,返回年月日,時(shí)分秒

3.datetime.time:表示時(shí)間的類,

4.datetime.timedelta:表示時(shí)間間隔,即兩個(gè)時(shí)間點(diǎn)的間隔

5.datetime.tzinfo:時(shí)區(qū)的相關(guān)信息

python代碼示例

import turtle                 # 導(dǎo)入繪圖海龜模塊
import datetime               # 導(dǎo)入日期時(shí)間模塊

# 移動(dòng)一段距離
def skip(distance):          # 移動(dòng)方法,不留移動(dòng)痕跡
    turtle.penup()           # 抬筆不繪制
    turtle.forward(distance) # 移動(dòng)指定距離
    turtle.pendown()         # 落筆移動(dòng)繪制

def draw_clock_dial():            # 繪制表盤的方法
    turtle.reset()           # 刪除圖形歸位
    turtle.hideturtle()       # 隱藏箭頭
    for i in range(60):       # 循環(huán)執(zhí)行60次,一圈為360度所以每一秒的角度為6度
        skip(160)              # 移動(dòng)160,相當(dāng)于表盤圓的半徑
        # 每5秒繪制一個(gè)小時(shí)刻度
        if i % 5 == 0:
            turtle.pensize(7)       # 刻度大小
            # 畫時(shí)鐘
            turtle.forward(20)       # 小時(shí)刻度的長度為20
            skip(-20)      # 復(fù)原小時(shí)刻度的位置
        else:
            turtle.pensize(1)      # 將畫筆大小設(shè)置為1
            turtle.dot()           # 繪制分鐘刻度的小圓點(diǎn)
        skip(-160)                 # 回到中心位置
        turtle.right(6)            # 向右旋轉(zhuǎn)6度


def get_week(t):                   # 獲取星期的方法
    week = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日']
    return week[t.weekday()]       # 返回當(dāng)天的星期


def create_pointer(length, name):     # 創(chuàng)建指針方法
    turtle.reset()                 # 刪除圖形歸位
    skip(-length * 0.1)            # 抬筆移動(dòng)指定距離
    turtle.begin_poly()            # 記錄多邊形
    turtle.forward(length * 1.1)   # 繪制指定長度的指針
    turtle.end_poly()              # 停止記錄多邊形
    # 注冊(cè)多邊形狀
    turtle.register_shape(name, turtle.get_poly())

def init_pointer():                # 初始化指針
    global secHand, minHand, hurHand, printer
    turtle.mode("logo")              # 重置Turtle指向上
    create_pointer(135,"secHand")       # 創(chuàng)建秒針圖形
    create_pointer(110,"minHand")       # 創(chuàng)建分針圖形
    create_pointer(90,"hurHand")        # 創(chuàng)建時(shí)針圖形
    secHand = turtle.Turtle()        # 創(chuàng)建秒針turtle對(duì)象
    secHand.shape("secHand")         # 創(chuàng)建指定秒針名稱的形狀
    minHand = turtle.Turtle()        # 創(chuàng)建分針turtle對(duì)象
    minHand.shape("minHand")         # 創(chuàng)建指定分針名稱的形狀
    hurHand = turtle.Turtle()        # 創(chuàng)建時(shí)針turtle對(duì)象
    hurHand.shape("hurHand")         # 創(chuàng)建指定時(shí)針名稱的形狀
    for hand in secHand, minHand, hurHand:   # 循環(huán)遍歷三個(gè)指針
        hand.shapesize(1, 1, 5)              # 設(shè)置形狀拉伸大小和輪廓線
        hand.speed(0)                        # 設(shè)置速度為最快
    printer = turtle.Turtle()                # 創(chuàng)建繪制文字的Turtle對(duì)象
    printer.hideturtle()                     # 隱藏箭頭
    printer.penup()                          # 抬筆

def move_pointer():                          # 移動(dòng)指針的方法
    # 不停的獲取時(shí)間
    t = datetime.datetime.today()
    second = t.second + t.microsecond * 0.000001    # 計(jì)算移動(dòng)的秒
    minute = t.minute + second/60                   # 計(jì)算移動(dòng)的分
    hour = t.hour + minute/60                       # 計(jì)算移動(dòng)的小時(shí)
    secHand.setheading(6*second)                     # 設(shè)置秒針的角度
    minHand.setheading(6*minute)                     # 設(shè)置分針的角度
    hurHand.setheading(30*hour)                      # 設(shè)置時(shí)針的角度
    turtle.tracer(False)                             # 關(guān)閉繪畫效果
    printer.forward(65)                              # 向上移動(dòng)65
    # 繪制星期
    printer.write(get_week(t), align="center",font=("Courier", 14, "bold"))
    printer.back(130)                                # 倒退130
    # 繪制年月日
    printer.write(t.strftime('%Y-%m-%d'), align="center",font=("Courier", 14, "bold"))
    printer.home()                                   # 歸位
    turtle.tracer(True)                              # 開啟繪畫效果
    turtle.ontimer(move_pointer, 10)                 # 10毫秒后調(diào)用move_pointer()方法

if __name__ == '__main__':
    turtle.setup(450, 450)      # 創(chuàng)建窗體大小
    init_pointer()              # 調(diào)用初始化指針的方法
    turtle.tracer(False)        # 關(guān)閉繪畫效果
    draw_clock_dial()            # 繪制表盤
    move_pointer()               # 調(diào)用移動(dòng)指針的方法
    turtle.mainloop()            # 不關(guān)閉窗體

運(yùn)行結(jié)果:

二、MFC代碼實(shí)現(xiàn)

表盤圖大家可以自己找一個(gè),添加到位圖資源里就行。

添加了一個(gè)定時(shí)器,實(shí)現(xiàn)指針轉(zhuǎn)動(dòng)更新

時(shí)針、分針、秒針的計(jì)算公式:

首先換算成12小時(shí)制,h = h % 12

時(shí)針每小時(shí)相當(dāng)于于相對(duì)于y軸順時(shí)針30度。每分鐘0.5度(秒可以忽略)

分針每分鐘是6度,秒是0.1度

秒針每秒也是6度。

定義分針秒針時(shí)針的長度,按照秒針最長,時(shí)針次之,時(shí)針最短自己定義下。

然后有了指針的夾角,和長度,就可以得到指針末端的坐標(biāo),從時(shí)鐘中心用LineTo方法畫線即可。

MFC代碼示例

void CdrawdateDlg::OnTimer(UINT_PTR nIDEvent)
{
	// TODO: 在此添加消息處理程序代碼和/或調(diào)用默認(rèn)值
	UpdateData(TRUE);
	CTime time = CTime::GetCurrentTime();                //獲得系統(tǒng)時(shí)間
	m_Sec = time.GetSecond();
	m_Min = time.GetMinute();
	m_Hour = time.GetHour();

	CDC* pDC = GetDC();
	CRect rect;
	GetClientRect(&rect);                                //獲取客戶區(qū)域
	CBitmap bitmap;                                      //定義圖片類
	bitmap.LoadBitmap(IDB_BITMAP2);                      //加載位圖
	CDC memdc;                                           //定義臨時(shí)畫布
	memdc.CreateCompatibleDC(pDC);                       //創(chuàng)建畫布
	memdc.SelectObject(&bitmap);                         //關(guān)聯(lián)圖片

	int x = rect.Width() / 2;
	int y = rect.Height() / 2;

	//memdc.DrawText(weekDay(time), &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);		// 顯示星期
	CString csCurrTime;
	csCurrTime.Format("%04d-%02d-%02d                        %s", time.GetYear(), time.GetMonth(), time.GetDay(), weekDay(time));
	memdc.DrawText(csCurrTime, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);		// 顯示當(dāng)前日期

	CPen MinutePen(PS_SOLID, 5, RGB(0, 0, 0));               //設(shè)置分針畫筆
	memdc.SelectObject(&MinutePen);
	memdc.MoveTo(x, y);
	//繪制分針
	memdc.LineTo(x + (long)100 * cos(PI / 2 - 2 * PI*m_Min / 60.0), y - (long)100 * sin(PI / 2 - 2 * PI*m_Min / 60.0));
	CPen HourPen(PS_SOLID, 8, RGB(0, 0, 0));                 //設(shè)置時(shí)針畫筆
	memdc.SelectObject(&HourPen);
	memdc.MoveTo(x, y);
	//繪制時(shí)針
	memdc.LineTo(x + (long)60 * cos(PI / 2 - 2 * PI*(5 * m_Hour / 60.0 + m_Min / 12.0 / 60.0))
		, y - (long)60 * sin(PI / 2 - 2 * PI*(5 * m_Hour / 60.0 + m_Min / 12.0 / 60.0)));
	CPen SecondPen(PS_SOLID, 2, RGB(255, 0, 0));            //設(shè)置秒針畫筆
	memdc.SelectObject(&SecondPen);
	memdc.MoveTo(x, y);
	memdc.LineTo(x + (long)140 * cos(PI / 2 - 2 * PI*m_Sec / 60.0), y - (long)140 * sin(PI / 2 - 2 * PI*m_Sec / 60.0));//繪制秒針
	memdc.MoveTo(x, y);
	memdc.LineTo(x + (long)10 * cos(PI / 2 - 2 * PI*(m_Sec + 30) / 60.0), y - (long)10 * sin(PI / 2 - 2 * PI*(m_Sec + 30) / 60.0));//繪制秒針
	SecondPen.DeleteObject();
	MinutePen.DeleteObject();
	HourPen.DeleteObject();
	pDC->BitBlt(0, 0, rect.right, rect.bottom, &memdc, 0, 0, SRCCOPY);                    //復(fù)制圖片
	memdc.DeleteDC();                                   //復(fù)制臨時(shí)畫布到預(yù)覽窗口
	bitmap.DeleteObject();                              //刪除圖片
	ReleaseDC(pDC);

	CDialogEx::OnTimer(nIDEvent);
}

輸出cstring(判斷今天星期幾)

CString CdrawdateDlg::weekDay(CTime oTime)
{
	CString str;
	int nDayOfWeek = oTime.GetDayOfWeek();
	switch (nDayOfWeek)
	{
	case 1:
		str = "星期日";
		break;
	case 2:
		str = "星期一";
		break;
	case 3:
		str = "星期二";
		break;
	case 4:
		str = "星期三";
		break;
	case 5:
		str = "星期四";
		break;
	case 6:
		str = "星期五";
		break;
	case 7:
		str = "星期六";
		break;
	}
	return str;
}

代碼運(yùn)行結(jié)果:

到此這篇關(guān)于利用Python代碼實(shí)現(xiàn)模擬動(dòng)態(tài)指針時(shí)鐘的文章就介紹到這了,更多相關(guān)Python動(dòng)態(tài)指針時(shí)鐘內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解python異步編程之a(chǎn)syncio(百萬并發(fā))

    詳解python異步編程之a(chǎn)syncio(百萬并發(fā))

    這篇文章主要介紹了詳解python異步編程之a(chǎn)syncio(百萬并發(fā)),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-07-07
  • Python使用pytest-playwright的原因分析

    Python使用pytest-playwright的原因分析

    pytest-playwright 是一個(gè) Python 包,它允許您使用 Microsoft 的 Playwright 庫在 Python 項(xiàng)目中進(jìn)行端到端測(cè)試,這篇文章主要介紹了Python為什么使用pytest-playwright,需要的朋友可以參考下
    2023-03-03
  • Pycharm連接遠(yuǎn)程mysql報(bào)錯(cuò)的實(shí)現(xiàn)

    Pycharm連接遠(yuǎn)程mysql報(bào)錯(cuò)的實(shí)現(xiàn)

    本文主要介紹了Pycharm連接遠(yuǎn)程mysql報(bào)錯(cuò)的實(shí)現(xiàn),文中通過圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • opencv?canny邊緣檢測(cè)算法詳解

    opencv?canny邊緣檢測(cè)算法詳解

    本文主要介紹了opencv?canny邊緣檢測(cè)算法詳解,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • OpenCV 繪制同心圓的示例代碼

    OpenCV 繪制同心圓的示例代碼

    本文主要介紹了OpenCV 繪制同心圓的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 通過Python中的http.server搭建文件上傳下載服務(wù)功能

    通過Python中的http.server搭建文件上傳下載服務(wù)功能

    通過本文我們學(xué)習(xí)了如何使用Python的http.server模塊搭建一個(gè)基本的HTTP服務(wù)器,并實(shí)現(xiàn)文件下載服務(wù),介紹了如何設(shè)置服務(wù)器端口、自定義文件目錄、定制HTTP響應(yīng)頭以及處理GET請(qǐng)求,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • python封裝對(duì)象實(shí)現(xiàn)時(shí)間效果

    python封裝對(duì)象實(shí)現(xiàn)時(shí)間效果

    這篇文章主要為大家詳細(xì)介紹了python封裝對(duì)象實(shí)現(xiàn)時(shí)間效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2010-10-10
  • python OpenCV 實(shí)現(xiàn)高斯濾波詳解

    python OpenCV 實(shí)現(xiàn)高斯濾波詳解

    這篇文章主要介紹了Python+OpenCV 實(shí)現(xiàn)高斯濾波的過程,關(guān)于高斯濾波的解釋,它是一種線性平滑濾波,適用于消除高斯噪聲,具體實(shí)現(xiàn)過程跟隨小編一起看看吧
    2021-10-10
  • Python基礎(chǔ) 括號(hào)()[]{}的詳解

    Python基礎(chǔ) 括號(hào)()[]{}的詳解

    這篇文章主要介紹了Python基礎(chǔ) 括號(hào)()、[]、{},下面文章將圍繞這三個(gè)括號(hào)的相關(guān)解析展開內(nèi)容,需要的朋友可以參考一下,洗碗粉對(duì)你有所幫助
    2021-11-11
  • django連接mysql數(shù)據(jù)庫及建表操作實(shí)例詳解

    django連接mysql數(shù)據(jù)庫及建表操作實(shí)例詳解

    這篇文章主要介紹了django連接mysql數(shù)據(jù)庫及建表操作,結(jié)合實(shí)例形式詳細(xì)分析了Django框架連接mysql數(shù)據(jù)庫、創(chuàng)建與查詢數(shù)據(jù)表相關(guān)操作實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-12-12

最新評(píng)論

岳池县| 治多县| 浠水县| 射洪县| 西乡县| 中卫市| 大英县| 青龙| 平安县| 德阳市| 苏尼特右旗| 石渠县| 义马市| 西安市| 丹寨县| 德庆县| 金溪县| 临泽县| 红安县| 临夏市| 湟中县| 繁峙县| 油尖旺区| 吴堡县| 海伦市| 彰化市| 中西区| 滨海县| 兴城市| 东乡族自治县| 山东| 基隆市| 枞阳县| 徐水县| 梧州市| 揭西县| 慈溪市| 萨迦县| 金华市| 微山县| 东兴市|