美文网首页
搭建kivy开发环境

搭建kivy开发环境

作者: 82b7cee728b3 | 来源:发表于2019-10-23 14:47 被阅读0次

    前言

    最近业务上需要开发一个windows桌面应用,再加上python大火,就想顺道学一下这门语言。
    在网上查了很多相关的框架,有的是收费的,有的官网都很难看,而我一直是个颜控,最后在多方对比之下就选择了kivy
    废话不多说了,下面就开始在windows上搭建一个开发环境吧。

    安装Anaconda

    • 简介:

    Anaconda是python/R的一个发行版,并且包含了包管理、依赖管理、环境管理等功能。
    安装时会自动安装python3、conda,以及各种常用的开源包,因此就不需要单独安装python了,省心省力。

    安装pyCharm

    笔者本身是一个java开发者,用惯了JetBrians的东西,搞python当然继续用他们家的IDE。
    通过下面的地址,可以下载到已经集成了Anaconda插件的pyCharm。
    当然,你也可以在pyCharm官网进行下载,并在安装后自己手动安装Anaconda插件。

    创建开发环境

    前面提到了Anaconda可以进行环境管理,可以为每个项目创建一个单独的开发环境,这样就可以减少依赖包之间干扰。
    所以,既然提供了这么好的功能,当然要用起来了。

    之前已经安装好了Anaconda,你可以打开开始菜单,发现出现了一堆新的应用,启动Anaconda Powershell Prompt (Anaconda3)或者Anaconda Prompt (Anaconda3),输入下面的命令就可以创建一个基于kivy的名称叫做myenv的开发环境了,具体的请查阅conda的官方文档

    conda create -n myenv kivy -c conda-forge
    

    创建项目

    • 配置解析器,即切换开发环境


      进入设置页面
    项目解析器 打开文件夹 选中上一步创建的kivy
    • 创建项目


      如图所示
    如图所示

    粘贴代码

    • 创建main.py
    from kivy.app import App
    from kivy.uix.widget import Widget
    from kivy.properties import (
        NumericProperty, ReferenceListProperty, ObjectProperty
    )
    from kivy.vector import Vector
    from kivy.clock import Clock
    
    
    class PongPaddle(Widget):
        score = NumericProperty(0)
    
        def bounce_ball(self, ball):
            if self.collide_widget(ball):
                vx, vy = ball.velocity
                offset = (ball.center_y - self.center_y) / (self.height / 2)
                bounced = Vector(-1 * vx, vy)
                vel = bounced * 1.1
                ball.velocity = vel.x, vel.y + offset
    
    
    class PongBall(Widget):
        velocity_x = NumericProperty(0)
        velocity_y = NumericProperty(0)
        velocity = ReferenceListProperty(velocity_x, velocity_y)
    
        def move(self):
            self.pos = Vector(*self.velocity) + self.pos
    
    
    class PongGame(Widget):
        ball = ObjectProperty(None)
        player1 = ObjectProperty(None)
        player2 = ObjectProperty(None)
    
        def serve_ball(self, vel=(4, 0)):
            self.ball.center = self.center
            self.ball.velocity = vel
    
        def update(self, dt):
            self.ball.move()
    
            # bounce of paddles
            self.player1.bounce_ball(self.ball)
            self.player2.bounce_ball(self.ball)
    
            # bounce ball off bottom or top
            if (self.ball.y < self.y) or (self.ball.top > self.top):
                self.ball.velocity_y *= -1
    
            # went of to a side to score point?
            if self.ball.x < self.x:
                self.player2.score += 1
                self.serve_ball(vel=(4, 0))
            if self.ball.x > self.width:
                self.player1.score += 1
                self.serve_ball(vel=(-4, 0))
    
        def on_touch_move(self, touch):
            if touch.x < self.width / 3:
                self.player1.center_y = touch.y
            if touch.x > self.width - self.width / 3:
                self.player2.center_y = touch.y
    
    
    class PongApp(App):
        def build(self):
            game = PongGame()
            game.serve_ball()
            Clock.schedule_interval(game.update, 1.0 / 60.0)
            return game
    
    
    if __name__ == '__main__':
        PongApp().run()
    
    • 创建pong.kv(.kv文件的名称要与App的类名一直)
    #:kivy 1.11.1
    
    <PongBall>:
        size: 50, 50 
        canvas:
            Ellipse:
                pos: self.pos
                size: self.size          
    
    <PongPaddle>:
        size: 25, 200
        canvas:
            Rectangle:
                pos:self.pos
                size:self.size
    
    <PongGame>:
        ball: pong_ball
        player1: player_left
        player2: player_right
        
        canvas:
            Rectangle:
                pos: self.center_x - 5, 0
                size: 10, self.height
        
        Label:
            font_size: 70  
            center_x: root.width / 4
            top: root.top - 50
            text: str(root.player1.score)
            
        Label:
            font_size: 70  
            center_x: root.width * 3 / 4
            top: root.top - 50
            text: str(root.player2.score)
        
        PongBall:
            id: pong_ball
            center: self.parent.center
            
        PongPaddle:
            id: player_left
            x: root.x
            center_y: root.center_y
            
        PongPaddle:
            id: player_right
            x: root.width - self.width
            center_y: root.center_y
    

    运行起来

    如果前面的步骤都没有出错,那么你应该可以启动一个乒乓球的游戏了

    相关文章

      网友评论

          本文标题:搭建kivy开发环境

          本文链接:https://www.haomeiwen.com/subject/wdpauctx.html