Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的Tkinter——它应该很慢,还是程序中其他地方的瓶颈?_Python_Python 3.x_Tkinter - Fatal编程技术网

Python中的Tkinter——它应该很慢,还是程序中其他地方的瓶颈?

Python中的Tkinter——它应该很慢,还是程序中其他地方的瓶颈?,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,在学校里,我们必须使用Python和Tkinter作为一个小组项目来创建一个游戏,由于程序越来越大,我想知道我的问题是不是Tkinter本身造成的,然后再尝试在程序中搜索问题 问题是,当我们开始创建单元时,当使用create_rectangle方法创建的多个单元同时显示(比如80个)时,如果我们开始四处移动它们,它会变得非常不稳定。在我们当时展示的游戏中,有几个元素(一些使用小GIF)用于多个菜单,画布上有我刚才提到的单位,一些小建筑也使用小GIF 我们使用after方法回调一个方法,该方法删除

在学校里,我们必须使用Python和Tkinter作为一个小组项目来创建一个游戏,由于程序越来越大,我想知道我的问题是不是Tkinter本身造成的,然后再尝试在程序中搜索问题

问题是,当我们开始创建单元时,当使用create_rectangle方法创建的多个单元同时显示(比如80个)时,如果我们开始四处移动它们,它会变得非常不稳定。在我们当时展示的游戏中,有几个元素(一些使用小GIF)用于多个菜单,画布上有我刚才提到的单位,一些小建筑也使用小GIF

我们使用after方法回调一个方法,该方法删除画布上的所有内容,然后每隔50毫秒在正确的位置重新绘制所有建筑物和单元


这是Tkinter很容易处理的问题还是我们程序本身的问题?

没有人能够回答这个特定的问题,因为它取决于很多因素。当您遇到性能问题时,您应该衡量在每个功能中花费的时间,以找出瓶颈所在。这就是所谓的评测,这里有一个很好的python内置评测器教程:

您正在查找两种信息:

  • 您在其中花费的时间最多的函数,包括对其他函数的调用。显然,列表中的第一个是main,因为所有程序都在其中运行。不过,您可能会发现一个函数的消耗量比您想象的要多

  • 您在其中花费的时间最多的函数,不包括对其他函数的调用。在那里你将有基本的功能。那些经常被呼叫的,等等,如果一些结果令你惊讶:用你自己的眼睛调查


如果您发现大部分时间都花在tkinter内部,那么您可能会使用错误的方法。尝试隔离一个调用tkinter并显示类似性能问题的小型独立程序,并将其发布在此处。评测信息对这项任务应该很有用。

Tk可以表现得相当好,但是对于编写游戏来说,如果你使用像

这样的库,你可能会有更好的开箱即用的性能。我知道pygames会是一个更好的选择,但是因为这是为学校准备的,我们必须在这个项目中使用Tkinter,这样每个团队都可以使用老师更熟悉的库。另外,如果你说tk可以表现得相当好,我将看看是否可以改进代码的某些部分。谢谢谢谢你的回答。我一定会阅读该教程并介绍我的程序!我分析了它,似乎这个程序在一个应该很快的函数上花费了太多的时间。我已经做了一个快速修复,我已经注意到一个巨大的性能提升。谢谢它应该很慢,他们这样设计的,这样你就可以看到它在运行的时候在做什么。没有人喜欢运行速度太快的狡猾软件——只是开玩笑:——)@Ron我应该把我的问题说得更清楚,哈哈。根据我的经验,tkinter速度非常慢。如果你放弃这种风格,你会发现有什么变化吗?