首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python箭头键不响应Paddle

Python箭头键不响应Paddle
EN

Stack Overflow用户
提问于 2018-01-16 11:35:53
回答 1查看 50关注 0票数 0

这就是我似乎无法解决的问题。

下面是我的代码的一部分:

代码语言:javascript
复制
from tkinter import*
import random
import time

class Paddle:
    def turn_left(self, evt):
            self.y = -3
    def turn_right(self, evt):
            self.y = 3

def __init__(self, canvas, color):
    self.canvas = canvas
    self.id = canvas.create_rectangle(0, 150, 30, 250, fill = color)
    self.y = 0
    self.canvas_height = self.canvas.winfo_height()
    self.canvas_width = self.canvas.winfo_width()
    self.canvas.bind_all('<KeyPress-a>', self.turn_left)
    self.canvas.bind_all('<KeyPress-d>', self.turn_right)


def draw(self):
    self.canvas.move(self.id, 0, self.y)
    pos = self.canvas.coords(self.id)
    if pos[1] <= 0:
        self.y = 0
    if pos[3] >= f00:
        self.y = 0        

ball = Ball(canvas, 'orange')
paddle = Paddle(canvas, "blue")

while 1:
    ball.draw()
    tk.update_idletasks()
    tk.update()
    time.sleep(0.01)

而且Paddle根本不会对'a‘和'd’做出反应。

现在,如果我取出'evt',运行代码,然后按'a‘或'd’,它会给我一个

错误,所以Python知道我正在按键...

我到底做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2018-01-16 16:02:50

while中,您只是忘记了

代码语言:javascript
复制
paddle.draw()

所以键改变了self.y,但是它不会执行draw(),它会移动paddle。

(并且名称self.y具有误导性-它不会直接改变划板的位置)

带有其他更改的完整工作版本(但没有球)

代码语言:javascript
复制
import tkinter as tk
import time

# --- classes ---

class Paddle:

    def __init__(self, canvas, color, x, y, key_up, key_down):
        self.canvas = canvas
        self.canvas_height = self.canvas.winfo_height()
        self.canvas_width = self.canvas.winfo_width()

        # if window (and canvas) doesn't exist (yet) then it has size (1,1)
        print('canvas size:', self.canvas_height, self.canvas_width)

        self.id = canvas.create_rectangle(x-15, y-50, x+15, y+50, fill=color)

        self.move_y = 0

        self.canvas.bind_all(key_up, self.turn_left)
        self.canvas.bind_all(key_down, self.turn_right)

    def turn_left(self, evt):
        self.move_y = -3

    def turn_right(self, evt):
        self.move_y = 3

    def draw(self):
        if self.move_y != 0:
            pos = self.canvas.coords(self.id)
            if pos[1] <= 0 and self.move_y < 0:
                self.move_y = 0
            if pos[3] >= self.canvas_height and self.move_y > 0:
                self.move_y = 0
            self.canvas.move(self.id, 0, self.move_y)

# --- main ---

root = tk.Tk()

canvas = tk.Canvas(root, width=300, height=300)
canvas.pack()

# to create window and canvas 
root.update()

paddle1 = Paddle(canvas, "blue", 15, 150, '<a>', '<d>')
paddle2 = Paddle(canvas, "red", 300-15, 150, '<Up>', '<Down>')

while True:
    paddle1.draw()
    paddle2.draw()
    root.update_idletasks()
    root.update()
    time.sleep(0.01)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48273725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档