中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用Python代碼實現模擬動態指針時鐘

發布時間:2023-04-10 17:46:53 來源:億速云 閱讀:162 作者:iii 欄目:開發技術

今天小編給大家分享一下怎么用Python代碼實現模擬動態指針時鐘的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

一、python代碼實現及turtle庫簡單介紹

桌面時鐘項目描述

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

2、使用datetime獲取系統時間;

3、時鐘動態顯示

turtle庫基本命令

1、turtle.setup()函數:用于啟動一個圖形窗口,它有四個參數turtle.setup(width, height, startx, starty)分別是:啟動窗口的寬度和高度表示窗口啟動時,窗口左上角在屏幕中的坐標位置。

2、turtle.pensize()函數:表示小烏龜運動軌跡的寬度。

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

4、turtle.seth(angle)函數:表示小烏龜啟動時運動的方向。它包含一個輸入參數,是角度值。0表示向東,90度向北,180度向西,270度向南;負值表示相反方向。程序中,我們讓小烏龜向-40度啟動爬行,即:向東南方向40度。

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

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

datetime模塊函數

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

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

3.datetime.time:表示時間的類,

4.datetime.timedelta:表示時間間隔,即兩個時間點的間隔

5.datetime.tzinfo:時區的相關信息

python代碼示例

import turtle                 # 導入繪圖海龜模塊
import datetime               # 導入日期時間模塊

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

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


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


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

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

def move_pointer():                          # 移動指針的方法
    # 不停的獲取時間
    t = datetime.datetime.today()
    second = t.second + t.microsecond * 0.000001    # 計算移動的秒
    minute = t.minute + second/60                   # 計算移動的分
    hour = t.hour + minute/60                       # 計算移動的小時
    secHand.setheading(6*second)                     # 設置秒針的角度
    minHand.setheading(6*minute)                     # 設置分針的角度
    hurHand.setheading(30*hour)                      # 設置時針的角度
    turtle.tracer(False)                             # 關閉繪畫效果
    printer.forward(65)                              # 向上移動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毫秒后調用move_pointer()方法

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

運行結果:

怎么用Python代碼實現模擬動態指針時鐘

二、MFC代碼實現

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

怎么用Python代碼實現模擬動態指針時鐘

添加了一個定時器,實現指針轉動更新

怎么用Python代碼實現模擬動態指針時鐘

時針、分針、秒針的計算公式:

首先換算成12小時制,h = h % 12

時針每小時相當于于相對于y軸順時針30度。每分鐘0.5度(秒可以忽略)

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

秒針每秒也是6度。

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

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

MFC代碼示例

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

	CDC* pDC = GetDC();
	CRect rect;
	GetClientRect(&rect);                                //獲取客戶區域
	CBitmap bitmap;                                      //定義圖片類
	bitmap.LoadBitmap(IDB_BITMAP2);                      //加載位圖
	CDC memdc;                                           //定義臨時畫布
	memdc.CreateCompatibleDC(pDC);                       //創建畫布
	memdc.SelectObject(&bitmap);                         //關聯圖片

	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);		// 顯示當前日期

	CPen MinutePen(PS_SOLID, 5, RGB(0, 0, 0));               //設置分針畫筆
	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));                 //設置時針畫筆
	memdc.SelectObject(&HourPen);
	memdc.MoveTo(x, y);
	//繪制時針
	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));            //設置秒針畫筆
	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);                    //復制圖片
	memdc.DeleteDC();                                   //復制臨時畫布到預覽窗口
	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;
}

以上就是“怎么用Python代碼實現模擬動態指針時鐘”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

琼结县| 新民市| 陵川县| 芜湖市| 衢州市| 清水河县| 吉隆县| 五河县| 福贡县| 文安县| 和静县| 开原市| 洛川县| 体育| 芮城县| 金坛市| 泰州市| 云南省| 洪洞县| 汝州市| 万载县| 临武县| 溧阳市| 扬中市| 平和县| 武义县| 和政县| 宜州市| 郸城县| 高平市| 旬邑县| 沂水县| 徐汇区| 彭山县| 大宁县| 习水县| 锡林浩特市| 凌源市| 布拖县| 文化| 昌平区|