2016-07-29 39 views
0

私はPythonでGUIを初めて使い、Kivyを試してみたかったです。 しかし、すでにポンチュートリアルで私がはまり込む: 私は、元のスクリプトを実行すると、次のエラーを取得:Kivyチュートリアル - pong.py noリスナーエラー - .kvが正しく閉じない

[WARNING   ] [Lang  ] The file C:\Users\Canopy\Skripts\Pong\pong.kv is loaded multiples times, you might have unwanted behaviors. 
[INFO    ] [Base  ] Start application main loop 
[ERROR    ] [Base  ] No event listeners have been created 
[ERROR    ] [Base  ] Application will leave 

は、なぜこれらのlisternersが不足していると、なぜ他の(明らかに)コードを実行することができますか?

EDIT:一度のためにそれを修正し、再起動、私は、私は同じ問題に遭遇し アプリケーションを実行し、次回。 .kvは適切に閉じられていないようです。

私はこれらのスクリプトです勝利7 上のPython 2.7(キャノピー)を実行しています: 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.py:

#:kivy 1.9.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 

答えて

0

[OK]を、実際に働いた基本的なITソリューション: PCの再起動後、エラーはもう発生しませんでした。 EDIT:アプリケーションを再実行した後、同じ問題が発生しました。まだ解決策が必要!

関連する問題