精华内容
下载资源
问答
  • 在《流畅的python》中看到的程序在控制台上显示一个小动画:旋转指针。通过按顺序写入字符"|/-",让其看起来就像是字符在旋转一样。在此记录一下。作者用写了两个版本,线程版和协程版。这里贴出线程版。点击github...

    在《流畅的python》中看到的程序在控制台上显示一个小动画:旋转指针。通过按顺序写入字符"|/-",让其看起来就像是字符在旋转一样。在此记录一下。作者用写了两个版本,线程版和协程版。这里贴出线程版。点击github访问

    # BEGIN SPINNER_THREAD

    import threading

    import itertools

    import time

    import sys

    class Signal: # <1>

    go = True

    def spin(msg, signal): # <2>

    write, flush = sys.stdout.write, sys.stdout.flush

    for char in itertools.cycle('|/-\\'): # <3>

    status = char + ' ' + msg

    write(status)

    flush()

    time.sleep(.1)

    write('\x08' * len(status)) # <4>

    if not signal.go:

    break

    write(' ' * len(status) + '\x08' * len(status)) # <6>

    def slow_function(): # <7>

    # pretend waiting a long time for I/O

    time.sleep(3) # <8>

    return 42

    def supervisor(): # <9>

    signal = Signal()

    spinner = threading.Thread(target=spin,

    args=('thinking!', signal))

    print('spinner object:', spinner) # <10>

    spinner.start() # <11>

    result = slow_function() # <12>

    signal.go = False # <13>

    spinner.join() # <14>

    return result

    def main():

    result = supervisor() # <15>

    print('Answer:', result)

    if __name__ == '__main__':

    main()

    # END SPINNER_THREAD

    原文注解:

    这个类定义一个简单的可变对象;其中有个go属性,用于从外部控制线程。

    这个函数会在单独的线程中运行。signal参数是前面定义的Signal类的实例。

    这其实是个无限循环,因为itertools . cycle函数会从指定的序列中反复不断地生成元素。

    这是显示文本式动画的诀窍所在:使用退格符(\x08) 把光标移回来。

    如果go属性的值不是True了,那就退出循环。

    使用空格清除状态消息,把光标移回开头。

    假设这是耗时的计算。

    调用sleep函数会阻塞主线程,不过一-定要这么做,以便释放GIL, 创建从属线程。

    这个函数设置从属线程,显示线程对象,运行耗时的计算,最后杀死线程。

    显示从属线程对象。输出类似于。

    启动从属线程。

    运行slow_ _function函数, 阻塞主线程。同时,从属线程以动画形式显示旋转指针。

    改变signal的状态;这会终止spin函数中的那个for循环。

    等待spinner线程结束。

    运行supervisor函数。

    虽然作者已经给了比较详细的解释,不过,还是有部分代码作者没说。可能会疑惑

    sys.out.write 和 sys.stdout.flush 是什么。

    在此之前,先看下我们熟悉的print,虽然我们经常用print输出打印直接显示。不过你知道可以用print 来写入文件吗?

    #print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)

    print('this is a file',file=open('test.txt', 'w'))

    运行上面代码,你会发现,在屏幕上看不到字符 ‘this is a file’,不过你在文件目录会发现新建的一个文本test.txt。里面内容是‘this is a file’。这是因为默认情况下,print,是将打印内容写入标准输出(sys.stdout)也就是控制台。而上面代代码重新设置print默认参数file=open('test.txt', 'w'),即将字符输入到了'test.txt'。现在应该猜到了吧,print 是sys.stdout 的一个封装,高级接口。标准输出指控制台了。

    那flush是什么呢。分别将flush(),去掉注释和加上运行看一下

    def spin(msg, signal): # <2>

    write, flush = sys.stdout.write, sys.stdout.flush

    for char in itertools.cycle('|/-\\'): # <3>

    status = char + ' ' + msg

    write(status)

    #flush()

    #write('\x08' * len(status)) # <4>

    time.sleep(.1)

    if not signal.go:

    break

    #write(' ' * len(status) + '\x08' * len(status)) # <6>

    会发现,注释掉时控台上将每个指针状态都一个接一个的打印出来了。而不注释的话,会等时间到到一次性全部打印出啦。这是因为sys.stdout.write是将字符先写入缓冲区,然后等缓冲区满了,或进行强制刷新缓冲区或者程序结束才会从缓冲区输出。而flush就是用于强制刷新缓冲区的。缓冲区是干嘛的?缓冲区用于避免重复执行昂贵的操作,提高程序效率的。详情参考What is output buffering in Python?.

    那默认print参数中flush=False,将其改为True是不是也可以实现动画呢?

    def spin(msg, signal): # <2>

    for char in itertools.cycle('|/-\\'): # <3>

    status = char + ' ' + msg

    print(status,flush=True)

    print('\x08' * len(status)) # <4>

    time.sleep(.1)

    if not signal.go:

    break

    #write(' ' * len(status) + '\x08' * len(status)) # <6>

    实际上,会将每个状态一行一行的打印出来,这是因为print默认参数中end='\n',在sys.stdout的缓冲中遇到换行就会立即输出打印。设置成end=''就可以了。

    def spin(msg, signal): # <2>

    for char in itertools.cycle('|/-\\'): # <3>

    status = char + ' ' + msg

    print(status,end='',flush=True)

    print('\x08' * len(status),end='') # <4>

    time.sleep(.1)

    if not signal.go:

    break

    #write(' ' * len(status) + '\x08' * len(status)) # <6>

    展开全文
  • python简单小动画

    千次阅读 2019-07-25 13:39:28
    今天给大家分享几个用python做的游戏 第一个 import random import turtle t = turtle.Pen() t.speed(0) turtle.bgcolor("black") colors = ["red", "green", "yellow", "gray", "blue", "orange", "purple", ...

    今天给大家分享几个用python做的小游戏

    第一个

    import random
    import turtle
    t = turtle.Pen()
    t.speed(0)
    turtle.bgcolor("black")
    colors = ["red", "green", "yellow", "gray", "blue", "orange", "purple", "white"]
    def random_spiral():
        t.pencolor(random.choice(colors))
        size = random.randint(10, 40)
        x = random.randrange(-turtle.window_width()//2,turtle.window_width()//2)
        y = random.randrange(-turtle.window_height()//2,turtle.window_height()//2)
        t.penup()
        t.setpos(x,y)
        t.pendown()
        for m in range(size):
            t.forward(m*2)
            t.left(91)
    for n in range(50):
        random_spiral()
    

    第二个

    # 绘制笑脸
    import random
    import turtle
    t = turtle.Pen()
    t.speed(0)
    t.hideturtle()
    turtle.bgcolor("black")
    def draw_smiley(x, y):
        t.penup()
        t.setpos(x, y)
        t.pendown()
    
        # head
        t.pencolor("yellow")
        t.fillcolor("yellow")
        t.begin_fill()
        t.circle(50)
        t.end_fill()
    
        # left eye
        t.setpos(x - 15, y + 60)
        t.fillcolor("blue")
        t.begin_fill()
        t.circle(10)
        t.end_fill()
    
        # right eye
        t.setpos(x + 15, y + 60)
        t.begin_fill()
        t.circle(10)
        t.end_fill()
    
        # mouth
        t.setpos(x - 25, y + 40)
        t.pencolor("black")
        t.width(10)
        t.goto(x - 10, y + 20)
        t.goto(x + 10, y + 20)
        t.goto(x + 25, y + 40)
        t.width(1)
    for n in range(50):
        x = random.randrange(-turtle.window_width() // 2, turtle.window_width() // 2)
        y = random.randrange(-turtle.window_height()//2, turtle.window_height()//2)
    
        draw_smiley(x, y)
    

    第三个

    # 自己的体重是多少个乒乓球
    def covert_in2cm(inches):
        return inches * 2.54
    def convert_lb2kg(pounds):
        return pounds / 2.2
    
    height_in = int(input("输入你多高"))
    weight_lb = int(input("输入你的体重"))
    height_cm = covert_in2cm(height_in)
    weight_kg = convert_lb2kg(weight_lb)
    ping_pang_tall = round(height_cm / 4)
    ping_pang_heavy = round(weight_kg * 1000 / 2.7)
    feet = height_in // 12
    inch = height_in % 12
    print("有", feet, "英尺", inch, "英寸高", weight_lb, "磅重")
    print("你的高度是", ping_pang_tall, "个乒乓球")
    print("你的体重相当于", ping_pang_heavy, "乒乓球")
    

    第四个

    import turtle
    t = turtle.Pen()
    t.speed(0)
    turtle.onscreenclick(t.setpos)
    

    第五个

    import turtle
    t = turtle.Pen()
    t.speed(0)
    turtle.onscreenclick(t.setpos)
    turtle.bgcolor("blue")
    t.pencolor("green")
    t.width(99)
    

    第六个

    # 用上下键来控制走向
    import turtle
    t = turtle.Pen()
    t.speed(0)
    t.turtlesize(2,2,2)
    def up():
        t.forward(50)
    def left():
        t.left(90)
    def right():
        t.right(90)
    turtle.onkeypress(up, "Up")
    turtle.onkeypress(left, "Left")
    turtle.onkeypress(right, "Right")
    turtle.listen()
    

    第七个

    import random
    import turtle
    t = turtle.Pen()
    t.speed(0)
    turtle.bgcolor("black")
    colors = ["red", "blue", "yellow", "green", "orange", "purple", "white", "gray"]
    def spiral(x,y):
        t.pencolor(random.choice(colors))
        size = random.randint(10,40)
        t.penup()
        t.setpos(x,y)
        t.pendown()
        for m in range(size):
            t.forward(m*2)
            t.left(91)
    turtle.onscreenclick(spiral)
    
        
    import random
    import turtle
    t = turtle.Pen()
    t.speed(0)
    t.hideturtle()
    turtle.bgcolor("black")
    def draw_smiley(x,y):
        t.penup()
        t.setpos(x,y)
        t.pendown()
    
        t.pencolor("yellow")
        t.fillcolor("yellow")
        t.begin_fill()
        t.circle(50)
        t.end_fill()
    
        # left eye
        t.setpos(x - 15, y + 60)
        t.fillcolor("blue")
        t.begin_fill()
        t.circle(10)
        t.end_fill()
    
        # right eye
        t.setpos(x + 15, y + 60)
        t.begin_fill()
        t.circle(10)
        t.end_fill()
    
        mouth
        t.setpos(x - 25, y + 40)
        t.pencolor("black")
        t.width(10)
        t.goto(x - 10, y + 20)
        t.goto(x + 10, y + 20)
        t.goto(x + 25, y + 40)
        t.width(1)
    
    turtle.onscreenclick(draw_smiley)
    

    第八个

     import random
     import turtle
     t = turtle.Pen()
    t.speed(0)
    t.hideturtle()
    turtle.bgcolor("black")
    colors = ["red", "yellow", "blue","green","orange","purple","white","gray"]
    def draw_kaleido(x,y):
        t.pencolor(random.choice(colors))
        size = random.randint(10,40)
        draw_spiral(x,y,size)
        draw_spiral(-x, y, size)
        draw_spiral(-x, -y, size)
        draw_spiral(x, -y, size)
        draw_spiral(x, y, size)
    def draw_spiral(x,y,size):
        t.penup()
        t.setpos(x,y)
        t.pendown()
        for m in range(size):
            t.forward(m*2)
            t.left(92)
    turtle.onscreenclick(draw_kaleido)
    
    展开全文
  • 展开全部你好,你可以考虑用turtle,这个是python自己带的简单画图的32313133353236313431303231363533e59b9ee7ad9431333431346432库,下面是一个小动画。fromturtleimportTurtle,ScreenMAP='''...

    展开全部

    你好,你可以考虑用turtle,这个是python自己带的简单画图的32313133353236313431303231363533e59b9ee7ad9431333431346432库,下面是一个小动画。from turtle import Turtle, Screen

    MAP = '''

    XXXXXXXXOX

    XOOOOOOOOX

    XOXXXXXXXX

    XOOOOXXXXX

    XXXXOXXXXX

    XXXXOXXXXX

    XXXXOOOOOX

    XXXXXXXXOX

    XOOOOOOOOX

    XOXXXXXXXX

    '''

    MAP_ARRAY = [list(row) for row in MAP.strip().split('\n')]

    MAP_ARRAY.reverse()  # put 0, 0 in lower left corner

    ADJACENT = [

    (0,  1),

    (-1,  0),          (1,  0),

    (0, -1),

    ]

    SCALE = 3

    STAMP_SIZE = 20

    WIDTH, HEIGHT = len(MAP_ARRAY[0]), len(MAP_ARRAY)

    def any_adjacent(x, y):

    return [(x + dx, y + dy) for dx, dy in ADJACENT if 0 <= x + dx 

    def move():  # slowly navigate the MAP, quit when no where new to go

    x, y = turtle.position()

    adjacent_squares = any_adjacent(int(x), int(y))

    # always moves to first valid adjacent square, need to consider

    # how to deal with forks in the road (e.g. shuffle adjacent_squares)

    for adjacent in adjacent_squares:

    if adjacent not in been_there:

    turtle.goto(adjacent)

    been_there.append(adjacent)

    screen.ontimer(move, 1000)  # one second per move, adjust as needed

    break

    screen = Screen()  # recast the screen into MAP coordinates

    screen.setup(WIDTH * STAMP_SIZE * SCALE, HEIGHT * STAMP_SIZE * SCALE)

    screen.setworldcoordinates(-0.5, -0.5, WIDTH - 0.5, HEIGHT - 0.5)

    turtle = Turtle('square', visible=False)

    turtle.shapesize(SCALE)

    turtle.speed('fastest')

    turtle.penup()

    for y, row in enumerate(MAP_ARRAY):  # draw the MAP

    for x, character in enumerate(row):

    if character == 'X':

    turtle.goto(x, y)

    turtle.stamp()

    turtle.color('red')

    turtle.shapesize(SCALE / 2)

    turtle.goto(1, 0)  # should use unique character in MAP to indicate start & end points

    turtle.showturtle()

    been_there = []  # prevent doubling back

    move()

    screen.mainloop()

    展开全文
  • 今天给大家带来一个项目,这个项目只用50行代码就能实现,它的名字叫做PIL(Python Image Library)。其实这个项目要做的事情很简单,就是把原来的一张图切图,变为9张图,看着就有牌面了,成功霸屏。那有的朋友就会...

    相信很多朋友在发朋友圈的时候,都会发一些话语,有些还会配一张图,但是普通的配图怎么符合我们程序员的身份呢?发出去都觉得没牌面,应该整点技术性的活。

    今天给大家带来一个项目,这个小项目只用50行代码就能实现,它的名字叫做PIL(Python Image Library)。

    其实这个项目要做的事情很简单,就是把原来的一张图切图,变为9张图,看着就有牌面了,成功霸屏。

    那有的朋友就会问了,这也只是正方形的图片,那我的图片要是很长或者很宽,切不了9张图,那怎么办?

    其实很简单,只要把高和宽计算出来,然后取最大值就可以了,比如下面这一张Python图片:

    就可以构造出一张正方形的图片啦

    当然,想把一张图片做成这样子也很容易啦,现在很多手机上的图片处理软件都能实现。

    其实这个小程序的开发思路也很简单,用图片展示给大家康康:

    对应代码如下:# -*- coding: utf-8 -*-'''将一张图片填充为正方形后切为9张图'''from PIL import Imageimport sys#将图片填充为正方形def fill_image(image):width, height = image.size#选取长和宽中较大值作为新图片的new_image_length = width if width > height else height#生成新图片[白底]new_image = Image.new(image.mode, (new_image_length, new_image_length), color='white')#将之前的图粘贴在新图上,居中 if width > height:#原图宽大于高,则填充图片的竖直维度#(x,y)二元组表示粘贴上图相对下图的起始位置new_image.paste(image, (0, int((new_image_length - height) / 2)))else:new_image.paste(image, (int((new_image_length - width) / 2),0))return new_image#切图def cut_image(image):width, height = image.sizeitem_width = int(width / 3)box_list = []# (left, upper, right, lower) for i in range(0,3):#两重循环,生成9张图片基于原图的位置 for j in range(0,3):#print((i*item_width,j*item_width,(i+1)*item_width,(j+1)*item_width))box = (j*item_width,i*item_width,(j+1)*item_width,(i+1)*item_width)box_list.append(box)image_list = [image.crop(box) for box in box_list]return image_list#保存def save_images(image_list):index = 1for image in image_list:image.save('./result/python'+str(index) + '.png', 'PNG')index += 1if __name__ == '__main__':file_path = "python.jpeg"image = Image.open(file_path)#image.show()image = fill_image(image)image_list = cut_image(image)save_images(image_list)

    相信大家看了代码就知道是怎么实现的了吧,代码中可能比较难理解的地方二胖也给出了相应的注释,大家赶快把代码下载下来拿去跑一跑。

    展开全文
  • Python Pygame动画原理

    2020-06-26 15:49:37
    Pygame动画原理 这是动画原理的第一节,首先需要游戏的最小系统,在此之后我就不再提游戏最小系统了,那是最基本的,可以看我的第一篇 所有代码、配套资源、讲解都在Github Coding-Notes帮助更多的人,还有Python...
  • Python真的是无穷的好用,涉及内容非常广泛,比如接下来给大家介绍的制作动画,就可以利用python实现,相信伙伴们听到这些内容肯定是非常感兴趣的,至于怎么去实现?大家想不想了解呢?下面编就给大家整理出来了...
  • 原标题:Python应用 | 三行代码实现GIF动画图片看腻了,来一点动画吧。 很酷的花朵GIF动画,想了解一下如何利用Python实现吗? 1. 准确图片数据集。准备需要制作GIF动画的图片若干,并放置在当前工作目录的data...
  • 我想为网络图设置动画以显示算法的进度.我正在使用NetworkX进行...这适用于具有少量节点的图,但是当我在10×10网格上实现时,动画非常慢并且减少了plt.pause()中的参数似乎对动画速度没有任何影响.这是一个实现Di...
  • 【零基础 Python体验课】第四季 pygame游戏开发 对象移动 由于移动需要刷新,所以要写在循环内,正好在死循环内不停循环刷新就很棒???? 动态写在循环里,静态写在循环外,如果静态的对象显示一个球是这样 如果想...
  • 我的问题是Kivy中的部件并没有像预期的那样有动画效果。下面是一些示例代码,为什么散点的动画效果比部件好:from kivy.app import Appfrom kivy.core.window import Windowfrom kivy.uix.widget import ...
  • 您可以使用通用Tk窗口部件after()方法来计划在以毫秒为单位指定的延迟后运行的函数.这只发生一次,所以通常函数本身也会调用after()来使进程永久化.在下面的代码中,定义了一个自定义的AnimatedGif容器类,它在一个...
  • 比如,有Python大神将蔡徐坤打球的视频转成字符动画,快来看看是如何做到的吧~安装 opencv-python 的包读取视频这里的VideoCapture是用来读取视频的,cv2.cvtColor(input_imageflag)用于转换颜色空间,其中flag就是...
  • 几乎没有什么限制,您可以完全控制此文件(一节中的更多信息)。 在这些示例中,我们将使用matplotlib进行绘制,但是您可以完全自由地使用所需的任何Python包生成框架。 展开正弦波 在此示例中,我们显示了如何...
  • 动画本身是由静态的图片组成的,按照一定的顺序将静态的图片在极短的时间内播放就可以形成动画。因此,我们可以根据这个原理,将动态的图片转化成一张张静态的图片,再对这些静态图片加以处理,最后,将处理好的静态...
  • 动画模拟布朗运动随机游走和停靠效果-Python小屋 照着Python小屋的推送,动手敲了一下动画模拟布朗运动随机游走和停靠效果 from tkinter.messagebox import showinfo import numpy as np import matplotlib....
  • from sprites import * # 从精灵模块导入所有命令cat = Sprite(2) # 新建动画角色,2为小猫while True:cat.fd(10) # 前进10cat.nextcostume() # 下一个造型time.sleep...
  • 其实前面程序中的高亮显示已经是动画效果了。程序会用红色、黄色交替显示几何图形的边框,这样看上去就是动画效果了。实现其他动画效果也是这个原理,程序只要增加一个定时器,周期性地改变界面上图形项的颜色、大小...
  • 分享下篮球比赛动画直播api数据接口代码示例,详细了解请查看接口文档,需注册下package com.huaying.demo.basketball;import javax.xml.bind.JAXBContext;import javax.xml.bind.Unmarshaller;import javax.xml....
  • Python真的是无穷的好用,涉及内容非常广泛,比如接下来给大家介绍的制作动画,就可以利用python实现,相信伙伴们听到这些内容肯定是非常感兴趣的,至于怎么去实现?大家想不想了解呢?下面编就给大家整理出来了...
  • from sprites import * # 从精灵模块导入所有命令cat = Sprite(2) # 新建动画角色,2为小猫while True:cat.fd(10) # 前进10cat.nextcostume() # 下一个造型time.sleep...
  • 我们可以把这动画拆解为3个动画1.小球落下2.球形变(包括小球变宽,变矮)3.小球上升小球的落下和上升没什么好说的实现如下//小球落下ValueAnimator downAnimator = ObjectAnimator.ofFloat(mShapeHolder...
  • 在前面的文章《python小欢喜(六)动画 (1) pygame的安装与初步使用》中介绍了如何安装pygame。接下来用pygame实现一个简单的画笔程序。 与前面的简单动画相比,最大的不同之处在于,画笔程序需要处理用户的输入,...
  • 伙伴们在编写Python代码的时候,会不会有种感觉,同样的一段代码,这里要用到,那里也要用到。怎么办呢?上大招~复制粘贴一时爽,写着写着突然发现,糟了,有一个错误。赶紧在每一处都修改一遍。这样的体验...
  • 在前一篇文章《python小欢喜(六)动画 (1) pygame的安装与初步使用》中介绍了如何安装pygame。接下来咱们用pygame做一些有趣的动画效果 显示笑脸图片 python代码如下: # -*- coding:utf-8 -*- # showPic.py...
  • 又到了一年一度的情人节!大家都准备送什么给自己心仪的对象呢?...先上效果:视频版:python表白程序 https://www.zhihu.com/video/1079411608517799936代码:from tkinter import *from tkin...
  • 有想学习python编程的,或是转行,或是大学生,还有工作中想提升自己能力的,正在学习的伙伴欢迎加入学习。 安装 opencv-python 的包 image 读取视频 image 这里的VideoCapture是用来读取视频的,cv2.cvtColor...
  • python Turtle做一个小动画

    千次阅读 2019-08-01 16:47:49
    详细代码功能在注解里面 import turtle #导入库 t = turtle.Pen() #创建一个Pen画笔 for i in range(0,4): #第一种方法画画 使用for t.forward(100) t.left(90) t.reset() #Restart #第二种方法 使用i来一步一步...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 768
精华内容 307
关键字:

python小动画

python 订阅