亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

Python趣味挑戰(zhàn)之pygame實現(xiàn)無敵好看的百葉窗動態(tài)效果

瀏覽:14日期:2022-06-18 08:18:12
目錄一、案例知識點概述二、準(zhǔn)備工作三、核心功能模塊四、完整代碼五、運行效果一、案例知識點概述

(一)使用到的python庫

使用pygame庫、random庫和os、sys等系統(tǒng)庫。

其中:pygame庫實現(xiàn)主體功能,提供窗口界面顯示、動態(tài)效果展示等random庫實現(xiàn)隨機數(shù)的生成,通過隨機數(shù)實現(xiàn)動態(tài)百葉窗的上下左右選擇、百葉窗的數(shù)量選擇等功能。 os庫實現(xiàn)圖片資源的裝載和讀取。sys庫實現(xiàn)退出操作等。

(二) 整體實現(xiàn)邏輯

通過WIDTH = 600 和 HEIGHT = 600設(shè)置窗口的高度和寬度通過runimage 和 nextimage 設(shè)置當(dāng)前顯示的圖像和下一張要顯示的圖像通過num_part = random.randint(3,8)來設(shè)置要顯示的百葉窗的數(shù)量通過num_list = []保存當(dāng)前runimage拆分出來的百葉窗的surface資源,用于在百葉窗動態(tài)效果過程中顯示。通過choose來設(shè)置是上下運動還是左右運動。

二、準(zhǔn)備工作

(一)實現(xiàn)pygame的主窗口

import pygame,syspygame.init()screen = pygame.display.set_mode((500, 500))pygame.display.set_caption(’大小框展示’)fcclock = pygame.time.Clock()while True: for event in pygame.event.get():if event.type == pygame.QUIT or event.type == pygame.K_F1: pygame.quit() sys.exit() fcclock.tick(60) pygame.display.flip() # 刷新窗口

黑黑的框,不截圖了。大家都懂。

(二)貼個圖顯示得好看點

import pygame,syspygame.init()screen = pygame.display.set_mode((500, 500))pygame.display.set_caption(’大小框展示’)fcclock = pygame.time.Clock()img = pygame.image.load(’./image/aerial-alpine-ceresole-reale-desktop-backgrounds-1562.jpg’).convert_alpha()img = pygame.transform.scale(img, (500, 500))while True: for event in pygame.event.get():if event.type == pygame.QUIT or event.type == pygame.K_F1: pygame.quit() sys.exit() screen.blit(img,(0,0)) fcclock.tick(60) pygame.display.flip() # 刷新窗口

Python趣味挑戰(zhàn)之pygame實現(xiàn)無敵好看的百葉窗動態(tài)效果

(三)圖片從哪里來

這里建議直接通過網(wǎng)絡(luò)上下載免費的、好看的圖片,并保存在指定的文件夾,用于過程中展現(xiàn)。

我認為有三種方法:

其一:使用爬蟲技術(shù)從網(wǎng)上下載圖片,可以開一個子線程負責(zé)采集網(wǎng)上圖片,然后加載到list列表中;其二:可以直接對電腦中所有的盤進行自動檢索,然后加載到list列表中; 其三:指定目錄,然后加載到list列表中;我這里偷個懶,選擇第三種方法實現(xiàn)。

具體實現(xiàn)代碼如下:

path = ’./image/’ files = [] dirs = os.listdir(path) for diretion in dirs:files.append(path + diretion)

(四)圖片裝載

我為什么在初始化的時候就進行裝載呢?

原因是:解決效率問題,無需每次使用時重復(fù)加載,而且在初始化的時候就適配屏幕大小進行圖片縮放。

因此,我把這個過程打包成一個函數(shù),方便后續(xù)調(diào)用,而且參數(shù)傳遞為:屏幕的大小。然后返回bglist對象。

for file in files: picture = pygame.transform.scale(pygame.image.load(file), (1440, 900)) dSurface = picture # dSurface = pygame.image.load(file).convert() bglist.append(dSurface)

OK,圖片有了,窗口有了,那么就開始實現(xiàn)我們的業(yè)務(wù)邏輯吧。

三、核心功能模塊

(一)實現(xiàn)init_image函數(shù)初始化加載圖片到surface對象

def init_image(): path = ’./image/’ files = [] dirs = os.listdir(path) for diretion in dirs:files.append(path + diretion) for file in files:picture = pygame.transform.scale(pygame.image.load(file), (WIDTH, HEIGHT))dSurface = picture# dSurface = pygame.image.load(file).convert()bglist.append(dSurface)

(二)初始化相關(guān)變量

runimage = Nonenextimage = Noneflag = False # FALSE沒有切屏 TRUE 切屏flag2 = Falsechoose = 6num_part = random.randint(3,8) # 記錄分成多少塊矩形框num_list = []num_increse = 1inc = random.choice([-1,1])while num_increse<=num_part: inc = -inc num_list.append(inc) num_increse += 1

這里,建議大家思考一下為什么要引入變量flag和flag2

(三)每次百葉窗切換完之后重置

def reset(): global flag,runimage,nextimage,flag2,i,j,choose,num_part,num_list flag = False # FALSE沒有切屏 TRUE 切屏 flag2 = False choose = random.randint(6,7) if nextimage is None:nextimage = random.choice(bglist) if runimage is None:runimage = random.choice(bglist) else:runimage = nextimagenextimage = random.choice(bglist) num_part = random.randint(3,8) # 記錄分成多少塊矩形框 num_list = [] num_increse = 1 inc = random.choice([-1,1]) while num_increse <= num_part:inc = -incnum_list.append(inc)num_increse += 1

(四)實現(xiàn)百葉窗動態(tài)切換的run函數(shù)

def run(): global flag,runimage,flag2,nextimage,i,j,choose,num_part,num_list reset() while True:for event in pygame.event.get(): if event.type == pygame.QUIT or event.type == pygame.K_F1:pygame.quit()sys.exit() if event.type == pygame.KEYDOWN:if event.key == pygame.K_ESCAPE: pygame.quit() sys.exit()if event.key == pygame.K_SPACE: if flag is False:# FALSE沒有切屏 TRUE 切屏flag = Trueflag2 = Falsescreen.fill((255, 255, 255)) # 設(shè)置背景為白色if flag: if choose==6:select_rect = []kk = 0while kk < num_part: tmp_rect = pygame.Rect(kk * WIDTH/num_part,0,WIDTH/num_part,HEIGHT) select_rect.append(runimage.subsurface(tmp_rect).copy()) kk += 1screen.blit(nextimage, (0, 0))mm = 0for each in zip(select_rect,num_list): if each[1]==1:screen.blit(each[0], (i+mm*WIDTH/num_part, -j)) else:screen.blit(each[0], (i+mm*WIDTH/num_part, j)) mm += 1j += stepif j >= HEIGHT: flag2 = True elif choose==7:select_rect = []kk = 0while kk < num_part: tmp_rect = pygame.Rect(0,kk * HEIGHT/num_part,WIDTH,HEIGHT/num_part) select_rect.append(runimage.subsurface(tmp_rect).copy()) kk += 1screen.blit(nextimage, (0, 0))mm = 0for each in zip(select_rect,num_list): if each[1]==1:screen.blit(each[0], (-i, j+mm*HEIGHT/num_part)) else:screen.blit(each[0], (i, j+mm*HEIGHT/num_part)) mm += 1i += stepif i >= WIDTH: flag2 = Trueelse: screen.blit(nextimage, (0, 0)) screen.blit(runimage, (0, 0))if flag2: reset()fcclock.tick(fps)pygame.display.flip() # 刷新窗口

(五)主函數(shù)

if __name__ == ’__main__’: init_image() run()四、完整代碼

import sys, pygameimport osimport randompygame.init() # 初始化pygame類WIDTH = 600HEIGHT = 600screen = pygame.display.set_mode((WIDTH, HEIGHT)) # 設(shè)置窗口大小pygame.display.set_caption(’美麗的屏保’) # 設(shè)置窗口標(biāo)題tick = pygame.time.Clock()fps = 60 # 設(shè)置刷新率,數(shù)字越大刷新率越高fcclock = pygame.time.Clock()runimage = Nonenextimage = Noneflag = False # FALSE沒有切屏 TRUE 切屏flag2 = Falsechoose = 6num_part = random.randint(3,8) # 記錄分成多少塊矩形框num_list = []num_increse = 1inc = random.choice([-1,1])while num_increse<=num_part: inc = -inc num_list.append(inc) num_increse += 1def init_image(): path = ’./image/’ files = [] dirs = os.listdir(path) for diretion in dirs:files.append(path + diretion) for file in files:picture = pygame.transform.scale(pygame.image.load(file), (WIDTH, HEIGHT))dSurface = picturebglist.append(dSurface)def reset(): global flag,runimage,nextimage,flag2,i,j,choose,num_part,num_list flag = False # FALSE沒有切屏 TRUE 切屏 flag2 = False i = 0 j = 0 choose = random.randint(6,7) if nextimage is None:nextimage = random.choice(bglist) if runimage is None:runimage = random.choice(bglist) else:runimage = nextimagenextimage = random.choice(bglist) num_part = random.randint(3,8) # 記錄分成多少塊矩形框 num_list = [] num_increse = 1 inc = random.choice([-1,1]) while num_increse <= num_part:inc = -incnum_list.append(inc)num_increse += 1def run(): global flag,runimage,flag2,nextimage,i,j,choose,num_part,num_list reset() while True:for event in pygame.event.get(): if event.type == pygame.QUIT or event.type == pygame.K_F1:pygame.quit()sys.exit() if event.type == pygame.KEYDOWN:if event.key == pygame.K_ESCAPE: pygame.quit() sys.exit()if event.key == pygame.K_SPACE: if flag is False:# FALSE沒有切屏 TRUE 切屏flag = Trueflag2 = Falsescreen.fill((255, 255, 255)) # 設(shè)置背景為白色if flag: if choose==6:select_rect = []kk = 0while kk < num_part: tmp_rect = pygame.Rect(kk * WIDTH/num_part,0,WIDTH/num_part,HEIGHT) select_rect.append(runimage.subsurface(tmp_rect).copy()) kk += 1screen.blit(nextimage, (0, 0))mm = 0for each in zip(select_rect,num_list): if each[1]==1:screen.blit(each[0], (i+mm*WIDTH/num_part, -j)) else:screen.blit(each[0], (i+mm*WIDTH/num_part, j)) mm += 1j += stepif j >= HEIGHT: flag2 = True elif choose==7:select_rect = []kk = 0while kk < num_part: tmp_rect = pygame.Rect(0,kk * HEIGHT/num_part,WIDTH,HEIGHT/num_part) select_rect.append(runimage.subsurface(tmp_rect).copy()) kk += 1screen.blit(nextimage, (0, 0))mm = 0for each in zip(select_rect,num_list): if each[1]==1:screen.blit(each[0], (-i, j+mm*HEIGHT/num_part)) else:screen.blit(each[0], (i, j+mm*HEIGHT/num_part)) mm += 1i += stepif i >= WIDTH: flag2 = Trueelse: screen.blit(nextimage, (0, 0)) screen.blit(runimage, (0, 0))if flag2: reset()fcclock.tick(fps)pygame.display.flip() # 刷新窗口if __name__ == ’__main__’: init_image() run()五、運行效果

Python趣味挑戰(zhàn)之pygame實現(xiàn)無敵好看的百葉窗動態(tài)效果

OK,寫完,其實還是蠻有趣的,大家可以自動動手敲敲,也許比我寫的更好。

到此這篇關(guān)于Python趣味挑戰(zhàn)之pygame實現(xiàn)無敵好看的百葉窗動態(tài)效果的文章就介紹到這了,更多相關(guān)pygame實現(xiàn)百葉窗動態(tài)效果內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 91老师国产黑色丝袜在线 | 国产下药迷倒白嫩美女网站 | 亚洲一区二区三区久久精品 | 久久婷婷色一区二区三区 | 亚洲国产最新在线一区二区 | 内地精品露脸自拍视频香蕉 | 晚上睡不着偷偷看b站免费是视频 | 国产视频一二 | 黄色国产大片 | 久久久久久国产精品mv | 天天色播 | 久久精品视频播放 | 欧美大片aaaa一级毛片 | 中文一区二区在线观看 | 久久国产精品男女热播 | 国产超薄肉色丝袜的免费网站 | 国产ppp在线视频在线观看 | 国产精品2020观看久久 | 久久er热这里只有精品23 | 国产精品视频国产永久视频 | 国产乱人伦偷精品视频不卡 | 亚洲综合激情六月婷婷在线观看 | 国产精品视频在 | 毛片网站大全 | 亚洲 另类 在线 欧美 制服 | 中国美女毛片 | 中文字幕一区二区三区不卡 | 国产亚洲精品久久久久久午夜 | 成人免费xxxxx在线视频 | 男人和女人做a免费视频 | 亚洲aⅴ久久久噜噜噜噜 | 日韩在线视频观看 | 黄色草逼视频 | 国产在线观看一区二区三区 | 在线观看精品国内福利视频 | 99这里只精品热在线获取 | 中文字幕亚洲综合 | 99re热视频这里只有精品5 | 欧美伦妇高清免费 | 看片在线观看免费 | aaaaa级毛片免费视频 |