PYQT-帮助分析python代码{内置方法exec}

PYQT-帮助分析python代码{内置方法exec},python,pyqt,profiling,show,profiler,Python,Pyqt,Profiling,Show,Profiler,我正在用PyQt开发一个软件来编辑游戏中的贴图-它支持我的游戏独有的很多东西 我的游戏主要有小地图,但我想尝试做一个更大的地图-但不幸的是,我的编辑器似乎迟钝(最多)与更大的地图-特别是在创建。编辑器中的每个磁贴都是带有图像的标签。所以我对它做了一个90x90映射,并使用python配置文件来理解是什么让它保持低调 python -m cProfile Editor.py > profile.log 总时间超过1秒的行如下所示: ncalls tottime percall cumti

我正在用PyQt开发一个软件来编辑游戏中的贴图-它支持我的游戏独有的很多东西

我的游戏主要有小地图,但我想尝试做一个更大的地图-但不幸的是,我的编辑器似乎迟钝(最多)与更大的地图-特别是在创建。编辑器中的每个磁贴都是带有图像的标签。所以我对它做了一个90x90映射,并使用python配置文件来理解是什么让它保持低调

python -m cProfile Editor.py > profile.log
总时间超过1秒的行如下所示:

ncalls  tottime percall cumtime percall filename:lineno(function)   
8205    22.397  0.003   22.397  0.003   {built-in   method  show}
1       5.09    5.09    37.913  37.913  {built-in   method  exec_}
1       1.824   1.824   1.824   1.824   {getExistingDirectory}      
1       1.038   1.038   1.038   1.038   {question}      
好的,getExistingDirectory会花费我选择目录所需的时间,所以我将其排除在外

结果显示该节目被呼叫8205次!因为地图上有8100个瓷砖,我认为这与此相关-我制作了一张90x90的地图,这是8100个瓷砖。同时,屏幕上还有其他控件,甚至还有一个包含117个元素的调色板——所有其他控件可能至少有200个小部件

因此,在我单击“新建文件”后,将创建中心小部件中的分幅。我的问题是,是否有一个远离的显示,而不是为每个标签小部件调用一次,只为它们所在的较大小部件调用一次

更新:

事实证明,我在每一部电影的创作中都给自己打了电话。我取消了电话!不幸的是,时间到了

ncalls tottime percall cumtime percall filename:lineno(function)
1      43.588  43.588  53.901  53.901  {built-in method exec_}     
1      2.325   2.325   2.325   2.325   {getExistingDirectory}       
1      1.447   1.447   1.447   1.447   {question}       
2      0.265   0.132   1.773   0.887   Editor.py:59(DrawMap)       
8452   0.244   0       0.244   0       {built-in method scaled}     
8442   0.227   0       1.233   0       TileXtra.py:319(initTile)       
24852  0.221   0       0.221   0       {built-in method connect}     
42260  0.128   0       0.128   0       {PIL._imaging.alpha_composite}       
42260  0.077   0       0.115   0       Image.py:472(_new)       
8452   0.077   0       0.24    0       ImageQt.py:44(__init__)       
8452   0.074   0       0.074   0       {fromImage}       
42260  0.072   0       0.403   0       Image.py:2033(alpha_composite)       
1      0.064   0.064   54.158  54.158  Editor.py:3(<module>)       
8452   0.042   0       0.042   0       {method 'encode' of 'ImagingEncoder' objects}   
8452   0.038   0       0.132   0       Image.py:530(tobytes)       
67740  0.036   0       0.05    0       Image.py:628(load)       
24852  0.033   0       0.033   0       {PyQt4.QtCore.SIGNAL}       
42664  0.03    0       0.03    0       Image.py:461(__init__)       
ncalls tottime percall cumtime percall文件名:lineno(函数)
143.588 43.588 53.901 53.901{内置方法exec}
1 2.325 2.325 2.325 2.325{getExistingDirectory}
1 1.447 1.447 1.447 1.447{问题}
2 0.265 0.132 1.773 0.887编辑器.py:59(绘图地图)
8452 0.244 0 0.244 0{内置方法缩放}
8442 0.227 0 1.233 0瓷砖额外。py:319(初始瓷砖)
24852 0.2210 0.2210{内置方法连接}
42260 0.128 0 0.128 0{PIL._imaging.alpha_composite}
42260 0.077 0.115 0图像。py:472(新)
8452 0.077 0.24 0 ImageQt.py:44(初始)
8452 0.074 0 0.074 0{fromImage}
42260 0.072 0 0.403 0图像。py:2033(阿尔法合成)
1 0.064 0.064 54.158 54.158编辑器.py:3()
8452 0.042 0 0.042 0{“ImagegenCoder”对象的方法“编码”}
84520.03800.1320图像。py:530(托比单位)
677400.036 0.05 0图像。py:628(负载)
24852 0.0330 0.0330{PyQt4.QtCore.SIGNAL}
42664 0.03 0 0.03 0 Image.py:461(初始)
确定找到了解决方案

在具有多个小部件的小部件的绘制方法中,使用
QWidget.setVisible(self,bool visible)
将其隐藏,然后在pyqt中显示,如:

class BigWidget(QWidget):
    def __init__(self, parent=None, **kwargs):
        QWidget.__init__(self, parent, **kwargs)

        ...

    def DrawManyWidgets(self, parent):
        self.setVisible(False)

        ...

        self.setVisible(True)

setUpdatesEnabled
实现了相同的功能,但这并不能回答问题,因为标题与问题文本无关。