PYQT-帮助分析python代码{内置方法exec}
我正在用PyQt开发一个软件来编辑游戏中的贴图-它支持我的游戏独有的很多东西 我的游戏主要有小地图,但我想尝试做一个更大的地图-但不幸的是,我的编辑器似乎迟钝(最多)与更大的地图-特别是在创建。编辑器中的每个磁贴都是带有图像的标签。所以我对它做了一个90x90映射,并使用python配置文件来理解是什么让它保持低调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
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
实现了相同的功能,但这并不能回答问题,因为标题与问题文本无关。