Python贪吃蛇游戏报_tkinter.TclError无效几何规格,该如何解决?
问题解决:_tkinter.TclError: bad geometry specifier
错误原因
window.geometry()的参数字符串中出现了浮点数(如+288.0+14.0),而Tkinter的窗口几何规格要求位置参数必须是整数,不能带小数点。此外代码还存在类名大小写不匹配、Food类未正确引用canvas的问题。
解决步骤
修正窗口位置计算,确保参数为整数
将窗口居中计算的代码改为整数运算,避免出现浮点数:x = (screen_width // 2) - (window_width // 2) y = (screen_height // 2) - (window_height // 2)或者将计算结果强制转为整数:
x = int((screen_width / 2) - (window_width / 2)) y = int((screen_height / 2) - (window_height / 2))统一类名大小写并修正Food类依赖
Python类名通常采用大驼峰命名法,且Food类需要接收canvas参数(因为canvas在类定义后才创建):class Snake: pass class Food: def __init__(self, canvas): # 用整数除法//替代/,避免浮点数运算 x = random.randint(0, (GAME_WIDTH // SPACE_SIZE - 1)) * SPACE_SIZE y = random.randint(0, (GAME_HEIGHT // SPACE_SIZE - 1)) * SPACE_SIZE self.coordinates = [x, y] canvas.create_oval(x, y, x + SPACE_SIZE, y + SPACE_SIZE, fill=FOOD_COLOUR, tag="food")正确实例化Food类
实例化时需将创建好的canvas传入Food构造函数:food = Food(canvas)
修正后的完整代码
import random from tkinter import * GAME_WIDTH = 700 GAME_HEIGHT = 700 SPEED = 50 SPACE_SIZE = 50 BODY_PARTS = 3 SNAKE_COLOUR = "#00FF00" FOOD_COLOUR = "#FF0000" BACKGROUND_COLOUR = "#000000" class Snake: pass class Food: def __init__(self, canvas): x = random.randint(0, (GAME_WIDTH // SPACE_SIZE - 1)) * SPACE_SIZE y = random.randint(0, (GAME_HEIGHT // SPACE_SIZE - 1)) * SPACE_SIZE self.coordinates = [x, y] canvas.create_oval(x, y, x + SPACE_SIZE, y + SPACE_SIZE, fill=FOOD_COLOUR, tag="food") def next_turn(): pass def change_direction(new_direction): pass def check_collisions(): pass def game_over(): pass window = Tk() window.title("Snake Game") score = 0 direction = 'down' label = Label(window, text="Score:{}".format(score), font=('consolas', 40)) label.pack() canvas = Canvas(window, bg=BACKGROUND_COLOUR, height=GAME_HEIGHT, width=GAME_WIDTH) canvas.pack() window.update() window_width = window.winfo_width() window_height = window.winfo_height() screen_width = window.winfo_screenwidth() screen_height = window.winfo_screenheight() # 用整数除法确保x、y为整数 x = (screen_width // 2) - (window_width // 2) y = (screen_height // 2) - (window_height // 2) window.geometry(f"{window_width}x{window_height}+{x}+{y}") snake = Snake() food = Food(canvas) window.mainloop()
内容的提问来源于stack exchange,提问作者YUSRA GHANI
相关产品推荐
相关产品推荐

