Python中的Tkinter - 它应该运行缓慢还是程序中有其他瓶颈?
在学校,我们需要用Python和Tkinter做一个游戏作为小组项目。因为程序变得越来越大,我想先确认一下问题是不是出在Tkinter上,而不是程序本身。
问题是,当我们开始创建单位的时候,如果同时有很多单位(比如说80个)用create_rectangle方法显示出来,当我们试着移动它们的时候,画面就会变得很卡顿。在我们当时显示的游戏部分,有几个元素(有些使用了小gif)用于多个菜单,而在画布上有我刚提到的单位,还有一些小建筑也使用了一些小gif。
我们使用after方法来回调一个方法,这个方法会删除画布上的所有内容,然后每50毫秒重新绘制所有建筑和单位到正确的位置。
这个问题是Tkinter应该能轻松处理的,还是说问题出在我们自己的程序里呢?
2 个回答
Tk虽然可以用来做一些简单的事情,但如果你想写一个游戏,使用像http://pygame.org这样的库会让你得到更好的性能,效果会更好。
这个问题没人能给出确切的答案,因为它受很多因素的影响。当你遇到性能问题时,应该测量每个函数花费的时间,以找出瓶颈在哪里。这种方法叫做“性能分析”,你可以在这里找到一个关于Python内置性能分析工具的不错教程:http://docs.python.org/library/profile.html
你需要关注两种信息:
你在函数内部花费最多时间的函数,包括对其他函数的调用。显然,列表中的第一个就是你的主函数,因为你的程序都是在它里面运行的。不过,你可能会发现某个函数的耗时比你想象的要多。
你在函数内部花费最多时间的函数,但不包括对其他函数的调用。这里你会看到一些基本函数,比如那些被频繁调用的函数等。如果有些结果让你感到惊讶,记得亲自去调查一下。
如果你发现大部分时间都花在了tkinter的内部,那么你可能是用错了它。试着隔离出一个小的独立程序,调用tkinter并显示类似的性能问题,然后把它发到这里。性能分析的信息对这个任务会很有帮助。