Клавиатура с ткинтером - PullRequest
       8

Клавиатура с ткинтером

0 голосов
/ 29 октября 2018

Я разрабатываю простую игру на python для класса, который я посещаю в школе. Мы должны использовать пакет tkinter для нашей графики, и я сталкиваюсь с проблемой получения управления объектами на холсте. Все, что я читаю онлайн, просто смущает меня все больше и больше. Будет ли возможно получить простой обзор того, как это сделать, или хотя бы базовый пример кода? Я хотел включить код, но мне действительно не с чем работать. Все, что я хочу сделать, это w = вверх a = влево s = вниз d = вправо, чтобы переместить квадрат вокруг экрана (холст). Спасибо

1 Ответ

0 голосов
/ 29 октября 2018

Вот пример, вырезанный из того, что я сделал некоторое время назад. Далеко не идеально, но это показывает основные принципы.

from tkinter import *

class Ball:
    def __init__(self,canvas,**kw):
        self.canvas = canvas
        self.radius = kw.get('radius',20)
        self.pos_x = kw.get('pos_x',0)
        self.pos_y = kw.get('pos_y',0)
        self.color = kw.get('color','blue')
        self.create()
    def calculate_ball_pos(self):
        x1 = self.pos_x
        x2 = self.pos_x + self.radius
        y1 = self.pos_y
        y2 = self.pos_y + self.radius
        return x1,y1,x2,y2
    def create(self):
        coords = self.calculate_ball_pos()
        self.ball = self.canvas.create_oval(coords[0],coords[1],coords[2],coords[3])
        self.canvas.itemconfig(self.ball, fill=self.color)
    def move(self,x=0,y=0):
        self.pos_x += x
        self.pos_y += y        
        coords = self.calculate_ball_pos()
        self.canvas.coords(self.ball,coords[0],coords[1],coords[2],coords[3])

def keypress(event):
    """Recieve a keypress and move the ball by a specified amount"""
    print(event)
    if event.char == 'w':
        ball.move(0,-5)
    elif event.char == 's':
        ball.move(0,5)
    elif event.char == 'a':
        ball.move(-5,0)
    elif event.char == 'd':
        ball.move(5,0)
    else:
        pass


root = Tk()
mainCanvas = Canvas(root, width=200, height=200)
root.bind('w',keypress)
root.bind('s',keypress)
root.bind('a',keypress)
root.bind('d',keypress)
mainCanvas.grid()
ball = Ball(mainCanvas,pos_x=50,pos_y=50)

root.mainloop()

Мяч будет двигаться вверх, вниз, влево или вправо с помощью клавиш w, s, a и d соответственно. Обратите внимание, что вместо того, чтобы каждый раз перерисовывать шар, я просто перемещаю объект (меняю его координаты)

Должно быть довольно просто сделать это с помощью коробки вместо этого. create_rectangle вместо create_oval

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...