电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Python趣味挑戰之pygame實現無敵好看的百葉窗動態效果

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

(一)使用到的python庫

使用pygame庫、random庫和os、sys等系統庫。

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

(二) 整體實現邏輯

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

二、準備工作

(一)實現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趣味挑戰之pygame實現無敵好看的百葉窗動態效果

(三)圖片從哪里來

這里建議直接通過網絡上下載免費的、好看的圖片,并保存在指定的文件夾,用于過程中展現。

我認為有三種方法:

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

具體實現代碼如下:

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

(四)圖片裝載

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

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

因此,我把這個過程打包成一個函數,方便后續調用,而且參數傳遞為:屏幕的大小。然后返回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,圖片有了,窗口有了,那么就開始實現我們的業務邏輯吧。

三、核心功能模塊

(一)實現init_image函數初始化加載圖片到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)

(二)初始化相關變量

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

(四)實現百葉窗動態切換的run函數

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)) # 設置背景為白色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()四、完整代碼

import sys, pygameimport osimport randompygame.init() # 初始化pygame類WIDTH = 600HEIGHT = 600screen = pygame.display.set_mode((WIDTH, HEIGHT)) # 設置窗口大小pygame.display.set_caption(’美麗的屏保’) # 設置窗口標題tick = pygame.time.Clock()fps = 60 # 設置刷新率,數字越大刷新率越高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)) # 設置背景為白色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趣味挑戰之pygame實現無敵好看的百葉窗動態效果

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

到此這篇關于Python趣味挑戰之pygame實現無敵好看的百葉窗動態效果的文章就介紹到這了,更多相關pygame實現百葉窗動態效果內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: MES系统工业智能终端_生产管理看板/安灯/ESOP/静电监控_讯鹏科技 | 最新范文网_实用的精品范文美文网 | 济南电缆桥架|山东桥架-济南航丰实业有限公司 | 变位机,焊接变位机,焊接变位器,小型变位机,小型焊接变位机-济南上弘机电设备有限公司 | 华东师范大学在职研究生招生网_在职研究生招生联展网 | 集装袋吨袋生产厂家-噸袋廠傢-塑料编织袋-纸塑复合袋-二手吨袋-太空袋-曹县建烨包装 | 跨境物流_美国卡派_中大件运输_尾程派送_海外仓一件代发 - 广州环至美供应链平台 | 棕刚玉_白刚玉_铝酸钙-锐石新材料| 北京模型公司-军事模型-工业模型制作-北京百艺模型沙盘公司 | 小港信息港-鹤壁信息港 鹤壁老百姓便民生活信息网站 | wika威卡压力表-wika压力变送器-德国wika代理-威卡总代-北京博朗宁科技 | [官网]叛逆孩子管教_戒网瘾学校_全封闭问题青少年素质教育_新起点青少年特训学校 | 隧道窑炉,隧道窑炉厂家-山东艾瑶国际贸易 | 紧急切断阀_气动切断阀_不锈钢阀门_截止阀_球阀_蝶阀_闸阀-上海上兆阀门制造有限公司 | 档案密集柜_手动密集柜_智能密集柜_内蒙古档案密集柜-盛隆柜业内蒙古密集柜直销中心 | 五轴加工中心_数控加工中心_铝型材加工中心-罗威斯 | 海日牌清洗剂-打造带电清洗剂、工业清洗剂等清洗剂国内一线品牌 海外整合营销-独立站营销-社交媒体运营_广州甲壳虫跨境网络服务 | 水轮机密封网 | 水轮机密封产品研发生产厂家 | 彩超机-黑白B超机-便携兽用B超机-多普勒彩超机价格「大为彩超」厂家 | 箱式破碎机_移动方箱式破碎机/价格/厂家_【华盛铭重工】 | 无负压供水设备,消防稳压供水设备-淄博创辉供水设备有限公司 | 网优资讯-为循环资源、大宗商品、工业服务提供资讯与行情分析的数据服务平台 | 门禁卡_智能IC卡_滴胶卡制作_硅胶腕带-卡立方rfid定制厂家 | 清管器,管道清管器,聚氨酯发泡球,清管球 - 承德嘉拓设备 | 工业胀紧套_万向节联轴器_链条-规格齐全-型号选购-非标订做-厂家批发价格-上海乙谛精密机械有限公司 | 膏方加工_丸剂贴牌_膏滋代加工_湖北康瑞生物科技有限公司 | 脱硫搅拌器厂家-淄博友胜不锈钢搅拌器厂家 | 蒜肠网-动漫,二次元,COSPLAY,漫展以及收藏型模型,手办,玩具的新媒体.(原变形金刚变迷TF圈) | 天津货架厂_穿梭车货架_重型仓储货架_阁楼货架定制-天津钢力仓储货架生产厂家_天津钢力智能仓储装备 | 上海办公室装修_上海店铺装修公司_厂房装潢设计_办公室装修 | 南京蜂窝纸箱_南京木托盘_南京纸托盘-南京博恒包装有限公司 | LZ-373测厚仪-华瑞VOC气体检测仪-个人有毒气体检测仪-厂家-深圳市深博瑞仪器仪表有限公司 | 洁净化验室净化工程_成都实验室装修设计施工_四川华锐净化公司 | 液压压力机,液压折弯机,液压剪板机,模锻液压机-鲁南新力机床有限公司 | 学叉车培训|叉车证报名|叉车查询|叉车证怎么考-工程机械培训网 | 工业铝型材-铝合金电机壳-铝排-气动执行器-山东永恒能源集团有限公司 | 北京包装设计_标志设计公司_包装设计公司-北京思逸品牌设计 | 保温杯,儿童婴童奶瓶,运动水壶「广告礼品杯定制厂家」超朗保温杯壶 | 油罐车_加油机_加油卷盘_加油机卷盘_罐车人孔盖_各类球阀_海底阀等车用配件厂家-湖北华特专用设备有限公司 | 加热制冷恒温循环器-加热制冷循环油浴-杭州庚雨仪器有限公司 | 洁净棚-洁净工作棚-无菌室-净化工程公司_北京卫护科技有限公司 |