我是一个高中生,因为会一点python然后就被班主任叫去做一个抽号的小程序,用来每天早读课老师抽幸运儿出去背书,然后我发挥我极致的想象力,最终用random库做了一个命令行式的小抽号器。
import time
from random import randint
def main():
while True:
num_list = []
num = int(input('数量:'))
for i in range(1,num):
new_num = randint(1,46)#我们班一共45人
while new_num in num_list:
new_num = randint(1,46)#防止有重复的号码
num_list.append(new_num)
for number in num_list:
print(number)
time.sleep(0.1)
if __name__ == '__main__':
main()
简单但是能用,运行效果大概长这样:
但是吧,别的班用的都是年段长亲手上阵搞得千年以前的flash动画,太高级,描述不出来,高级到我以为我回到了七八十年代。
【图片】
没有图片,因为我根本就没有原文件。(要是有的话就没有这个苦差事了)
然后我思来想去,能想到最好的动画就是把原神的动画模仿一下。
大体思路就是这样:
- 使用QT5创一个UI,然后有一些必要的按键。
- 然后点击抽卡按钮时,使用opencv+ffplayer播放原神抽卡时候的视频。
- 然后再制造动画模板,显示号数(或者人名)
然后我就开始痛苦的抽卡,扣视频,成功的将五种抽卡时的视频都弄了出来:
然后凭着我自学两年半的基础写出了个函数:
import time
import cv2
import numpy as np
from ffpyplayer.player import MediaPlayer
def video(way):
url = f'video/{way}.mp4'
#print(url)
cap = cv2.VideoCapture(url)
player = MediaPlayer(url)
#print(cap)
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
#cv2.namedWindow("No Border Window", cv2.WINDOW_NORMAL)
#cv2.setWindowProperty("No Border Window", cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)
fps = int(500 / cap.get(cv2.CAP_PROP_FPS))
#print(self.frame_width,self.frame_height,self.fps)
while(cap.isOpened()):
ret,frame = cap.read()
#print(ret,frame)
try:
src = cv2.resize(frame,(frame_width,frame_height),interpolation=cv2.INTER_CUBIC)
cv2.imshow('',src)
except:
break
if cv2.waitKey(fps) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
if __name__ == '__main__':
video('glod_ten')
但是不知道为什么,视屏播放完后,ffplayer还在那里播放音频,死命找原因,但是并没有找到
它是cv2.destroyAllWindows()函数运行完后还存在,我也试过用del指令删除ffplayer实例,于是它就卡在del指令那一行了。
正常来说不应该是音频播放完后,就不会再有声音了么?有大佬能看看哪里出了问题嘛?
(等待)