Python游戏设置时间限制报错求助:'int' object is not callable
解决Python游戏时间限制的错误与更简便实现方法
先解决当前的TypeError问题
你遇到的TypeError: 'int' object is not callable,根源是**time这个名字被当成了整数变量,或者没有正确导入时间函数**:
- 如果之前在代码里给
time赋值过(比如time = 30),那time()就会报错——此时time是整数而非函数; - 如果没有导入
time模块的time()函数,需要在代码开头添加:
或者用from time import timeimport time,然后把所有time()改成time.time()。
另外看你提供的代码,还有个小冗余:你重复创建了两次时间和分数的文本对象,前两行的c.create_text完全是多余的,直接保留后两行赋值给time_text和score_text即可。
更简便的时间限制实现方法(适配tkinter场景)
你的代码用了while True循环+window.update(),这其实不是tkinter的推荐写法,容易导致界面卡顿。推荐用tkinter自带的after()方法来实现定时更新,既简洁又稳定:
优化后的完整示例代码
from tkinter import Tk, Canvas, randint from time import time window = Tk() c = Canvas(window, width=800, height=600) c.pack() # 只创建一次文本对象,避免冗余 time_text = c.create_text(450, 20, text='Time', fill='red') score_text = c.create_text(650, 20, text='Score', fill='red') ENNEMY_CHANCE = 10 TIME_LIMIT = 30 SCORE_BONUS = 1000 score = 0 bonus = 0 end_time = time() + TIME_LIMIT def print_score(score_val): c.itemconfig(score_text, text=str(score_val)) def print_time(remaining_time): c.itemconfig(time_text, text=f"Time: {remaining_time}") def create_ennemy(): # 替换成你原来的敌人创建逻辑 pass def move_ennemies(): # 替换成你的敌人移动逻辑 pass def hide_ennemies(): # 替换成你的敌人隐藏逻辑 pass def ennemy_kill(): # 替换成你的敌人击杀计分逻辑 return 0 def game_loop(): global score, bonus, end_time # 生成敌人 if randint(1, ENNEMY_CHANCE) == 1: create_ennemy() # 游戏核心逻辑更新 move_ennemies() hide_ennemies() score += ennemy_kill() # 加分奖励时间逻辑 if (score // SCORE_BONUS) > bonus: bonus += 1 end_time += TIME_LIMIT # 更新UI显示 print_score(score) remaining_time = int(end_time - time()) print_time(remaining_time) # 检查时间是否结束 if remaining_time > 0: # 每隔100ms(0.1秒)调用一次游戏循环,保证流畅度 window.after(100, game_loop) else: # 时间结束后的逻辑,比如显示游戏结束提示 c.create_text(400, 300, text="GAME OVER!", fill="red", font=("Arial", 30)) # 启动游戏主循环 game_loop() window.mainloop()
为什么这个方法更好?
- 避免了
while True循环阻塞tkinter的主事件循环,界面不会出现卡顿或无响应; after()是tkinter原生支持的定时机制,完全符合tkinter的设计规范;- 代码结构更清晰,游戏逻辑和UI更新分离,后续维护和扩展更方便。
额外提示
- 变量名尽量避免和内置函数/模块重名(比如不要用
time作为变量名),这是很多新手容易踩的坑; - 时间显示可以加上单位(比如
Time: 25s),让玩家更直观。
内容的提问来源于stack exchange,提问作者cl.ement05
相关产品推荐
相关产品推荐

