【发布时间】:2018-08-29 19:58:52
【问题描述】:
我是 Python 的初学者,只想制作一个可以通过键盘上的按键移动的红色方块。但是在我运行这个之后,只出现了绿色画布,没有红色方块。代码如下:
进口:
try:
import Tkinter
except:
import tkinter as Tkinter
import time
这里只是一些常量
__author__ = "Brano"
print(__author__)
GAME_WIDTH = 800
GAME_HEIGHT = 600
GAME_BG = 'green'
MOVE_SPEED = 10
带有初始化的主类:
class Game(Tkinter.Tk):
def __init__(self, *args, **kwargs):
Tkinter.Tk.__init__(self, *args, **kwargs)
# Trigger Of Other Functions
self.x = GAME_WIDTH/2
self.y = GAME_HEIGHT/2
self.create_board()
self.create_men()
self.bind('<Any-KeyPress>',self.move)
创建板:
def create_board(self):
self.board = Tkinter.Canvas(width=GAME_WIDTH, height=GAME_HEIGHT,
bg=GAME_BG)
self.board.pack(padx=10, pady=10)
return
创建红色方块:
def create_men(self):
self.men = self.board.create_rectangle(300, 300, 310, 310, fill='red')
return
按键后移动方块:
def move(self, event=None):
key = event.keysym
if key=='Left':
self.x = MOVE_SPEED
elif key=='Right':
self.x = -MOVE_SPEED
elif key=='Up':
self.y = MOVE_SPEED
elif key=='Down':
self.y = -MOVE_SPEED
else:
pass
return
只是 tkinter 更新:
def TkUpdate(self):
self.update()
self.update_idletasks()
return
我的主要动作更新:
def GameUpdate(self):
self.board.move(self.men, self.x, self.y)
return
检查是否导入:
if __name__ == '__main__':
root=Game(className=" Snake Game ")
while True:
root.TkUpdate()
root.GameUpdate()
time.sleep(0.09)
else :
print("U cannot import me !")
这是全班:
class Game(Tkinter.Tk):
def __init__(self, *args, **kwargs):
Tkinter.Tk.__init__(self, *args, **kwargs)
# Trigger Of Other Functions
self.x = GAME_WIDTH/2
self.y = GAME_HEIGHT/2
self.create_board()
self.create_men()
self.bind('<Any-KeyPress>',self.move)
def create_board(self):
self.board = Tkinter.Canvas(width=GAME_WIDTH, height=GAME_HEIGHT, bg=GAME_BG)
self.board.pack(padx=10, pady=10)
return
def create_men(self):
self.men = self.board.create_rectangle(300, 300, 310, 310, fill='red')
return
def move(self, event=None):
key = event.keysym
if key=='Left':
self.x = MOVE_SPEED
elif key=='Right':
self.x = -MOVE_SPEED
elif key=='Up':
self.y = MOVE_SPEED
elif key=='Down':
self.y = -MOVE_SPEED
else:
pass
return
def TkUpdate(self):
self.update()
self.update_idletasks()
return
def GameUpdate(self):
self.board.move(self.men, self.x, self.y)
return
【问题讨论】:
-
能否提供一个不分成五十个小片段的代码版本?
-
给你了
-
请阅读并遵循有关如何创建minimal reproducible example 的建议,并删除所有重复代码。如果可能的话,我们需要一个单一的、简短的代码块。