日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

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

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

(一)使用到的python庫(kù)

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

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

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

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

二、準(zhǔn)備工作

(一)實(shí)現(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() # 刷新窗口

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

(二)貼個(gè)圖顯示得好看點(diǎn)

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實(shí)現(xiàn)無(wú)敵好看的百葉窗動(dòng)態(tài)效果

(三)圖片從哪里來(lái)

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

我認(rèn)為有三種方法:

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

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

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

(四)圖片裝載

我為什么在初始化的時(shí)候就進(jìn)行裝載呢?

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

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

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,圖片有了,窗口有了,那么就開始實(shí)現(xiàn)我們的業(yè)務(wù)邏輯吧。

三、核心功能模塊

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

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

(四)實(shí)現(xiàn)百葉窗動(dòng)態(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()五、運(yùn)行效果

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

OK,寫完,其實(shí)還是蠻有趣的,大家可以自動(dòng)動(dòng)手敲敲,也許比我寫的更好。

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

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
麻豆精品久久| 婷婷精品在线| 精品99在线| 国产在线日韩精品| 国产精品啊啊啊| 精品午夜久久| 国产精品毛片久久| 国产精品亚洲一区二区三区在线观看| а√天堂8资源在线| 色综合www| 免费黄色成人| 久久午夜精品一区二区| 日本伊人久久| 国产精品流白浆在线观看| 激情综合婷婷| 日韩在线观看一区| 婷婷丁香综合| 综合精品一区| 欧美日韩在线精品一区二区三区激情综合 | 免费精品国产的网站免费观看| 亚州av乱码久久精品蜜桃| 国产亚洲激情| 日韩高清在线不卡| 欧美日韩国产精品一区二区亚洲| 免费在线观看精品| 日韩高清二区| 国产一区二区三区视频在线| 日韩中文影院| 免费日韩av| 国产乱子精品一区二区在线观看| 国产一区二区三区四区五区 | 日韩中文字幕亚洲一区二区va在线 | 在线精品亚洲| 国产精品流白浆在线观看| 在线看片国产福利你懂的| 亚洲二区在线| 亚洲一区av| 老色鬼精品视频在线观看播放| 色婷婷综合网| 午夜在线视频观看日韩17c| 久久国产精品免费一区二区三区| 丰满少妇一区| 久久亚洲影院| 精品一级视频| 一区在线免费| 欧美激情日韩| 欧美特黄a级高清免费大片a级| 亚洲97av| www.com.cn成人| 蜜臀久久99精品久久久久久9| 国产精品一站二站| 久久久久国产| 国产伦精品一区二区三区在线播放 | 欧美一区=区| 久久字幕精品一区| 亚洲欧美日本日韩| 精品久久福利| 五月国产精品| 91精品一区国产高清在线gif| 一区二区三区国产在线| 欧美激情国产在线| 亚洲精选91| 性欧美videohd高精| 国产日韩一区二区三免费高清| 美女网站视频一区| 国产日韩1区| 欧美日韩国产亚洲一区| 久久免费精品| 日本不卡视频在线观看| 久久精品国语| 久久不卡国产精品一区二区| 国产精品普通话对白| 国产精品久久亚洲不卡| 性一交一乱一区二区洋洋av| 四虎成人av| 日韩国产在线观看一区| 女同性一区二区三区人了人一 | 国产精品.xx视频.xxtv| 亚洲欧美日本日韩| 欧美日韩在线观看首页| 97久久中文字幕| 亚洲免费黄色| 日韩成人综合| 久久久久亚洲精品中文字幕| 日韩激情中文字幕| 亚洲一区欧美二区| 亚洲日本网址| 激情久久一区二区| 日韩超碰人人爽人人做人人添| 国产韩日影视精品| 蜜臀久久精品| 成人在线视频免费| 国产精品日韩精品在线播放| 亚洲综合福利| 99国产精品自拍| 成人看片网站| 伊人网在线播放| 久久精品国产在热久久| 国产欧美精品| 日韩高清电影免费| 日韩在线黄色| 一区二区三区国产盗摄| 久久99伊人| 视频一区中文| 欧美一区三区| 久久中文字幕av一区二区不卡| 国产成人精品三级高清久久91| 国产美女视频一区二区| 日韩国产在线观看| 亚洲+小说+欧美+激情+另类| 蜜臀91精品一区二区三区| 在线亚洲精品| 日韩午夜高潮| 欧美午夜不卡影院在线观看完整版免费| 日本午夜大片a在线观看| 成人在线视频免费看| 麻豆精品蜜桃视频网站| 国产精品毛片aⅴ一区二区三区| 亚洲一区二区三区四区电影| 亚洲免费高清| 狠狠色综合网| 亚洲深夜av| 亚洲欧美久久久| 一区二区不卡| 亚洲精品人人| 欧美精品国产白浆久久久久| 久久精品av麻豆的观看方式| 日本午夜精品一区二区三区电影| 日韩三级精品| 国产欧美日韩精品一区二区免费 | 久久精品国产免费| 九九99久久精品在免费线bt| 精品久久视频| av中文字幕在线观看第一页| 久久精品毛片| 天堂中文av在线资源库| 久久久久久久久99精品大| 欧美久久精品一级c片| 美女黄网久久| 日韩av不卡一区二区| 国产精品18| 97精品国产一区二区三区| 日韩av自拍| 99久久激情| 中文视频一区| 国产美女久久| 日本在线高清| 日韩视频在线一区二区三区 | 国产精品日韩精品在线播放| 国产成人精品福利| 国产综合色产| 在线精品小视频| 亚洲日本久久| 国产精成人品2018| 日韩综合在线| 亚洲激情偷拍| 日韩国产高清在线| 精品国产乱码久久久| 亚洲国产专区校园欧美| 日本大胆欧美人术艺术动态| 国产亚洲字幕| 欧美日韩视频免费观看| 另类亚洲自拍| 欧美黄色精品| 欧美日韩在线网站| 亚洲区国产区| 欧美日本不卡| 亚洲免费福利| 亚洲一区二区三区久久久| 欧美aa在线视频| 亚洲一级影院| 欧美中文高清| 青青青免费在线视频| 一区二区三区四区日韩| 精品国产麻豆| 六月婷婷一区| 国产一区调教| 国产精品婷婷| 久久不卡国产精品一区二区| 99久久九九| 欧美日本久久| 在线中文字幕播放| 亚洲精品大片| 播放一区二区| 欧美日本不卡| 亚洲性色视频| 欧美日韩1区2区3区| 久久久久久久久丰满| 欧美午夜三级| 好吊一区二区三区| 麻豆久久一区二区| 一区二区三区四区在线观看国产日韩| 福利视频一区| 日本一区免费网站| 久久亚洲精品中文字幕蜜潮电影| 久久国内精品| 99久久久久| 国产精品天堂蜜av在线播放| 香蕉精品视频在线观看| 日韩毛片一区|