gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 18:09:21 25 4
gpt4 key购买 nike

我正在 PyQt 中开发一个软件来编辑游戏中的图 block map - 它支持许多我的游戏独有的功能。

我的游戏主要有小 map ,但我想尝试制作更大的 map - 但不幸的是,我的编辑器似乎对更大的 map react 迟缓(充其量) - 特别是在创建时。编辑器中的每个图 block 都是带有图像的标签。所以我在它上面做了一个 90x90 的 map ,并使用 python 配置文件来了解是什么导致了它的下降。

python -m cProfile Editor.py > profile.log

总时间超过一秒的行如下:

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 次!由于 map 中有8100个图 block ,我认为这与其有关 - 我制作了一个90x90的 map ,即8100个图 block 。与此同时,屏幕上还有其他控件,甚至还有一个包含 117 个元素的调色板 - 所有其他控件可能至少有 200 个小部件。

因此,在我单击新文件后,将创建中央小部件中的图 block 。我的问题是,是否有一种方法可以让显示不再为每个标签小部件调用一次,而是只为它们所在的较大小部件调用一次?

更新:

事实证明,我在创建每个项目时都调用了展示自己。我删除了通话!不幸的是,时间已经过去了。

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__)

最佳答案

好的,找到了解决方案。

在具有多个小部件的小部件的绘制方法中,使用QWidget.setVisible (self, boolvisible)将其隐藏然后在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)

关于python - PYQT - 帮助分析 python 代码{内置方法 exec_},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26266524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com