gpt4 book ai didi

python - pyqtgraph 从 PyQt4 小部件中的 API 导出失败/崩溃 python

转载 作者:行者123 更新时间:2023-11-30 23:16:56 24 4
gpt4 key购买 nike

我有一个使用 PyQt4 和 pyqtgraph 构建的小应用程序。我想在其中放置一些按钮来调用 pyqtgraph 可用的导出器(而不是,或者实际上除了使用用户右键单击绘图时弹出的上下文菜单)。

但是到目前为止,我还无法让它发挥作用。

这是该应用程序的简化版本:

from PyQt4 import QtCore, QtGui
import pyqtgraph as pg
import pyqtgraph.exporters
import numpy as np
import sys


class SimpleUI(QtGui.QWidget):

def __init__(self):
QtGui.QWidget.__init__(self)

self.resize(1500, 1000)
self.plot_widget = pg.GraphicsLayoutWidget(self)
self.layout = QtGui.QVBoxLayout(self)

data = np.arange(10)
self.plt = self.plot_widget.addPlot()
self.plt.plot(data)

self.export_btn = QtGui.QPushButton("Export")
self.export_btn.clicked.connect(self.export)

self.layout.addWidget(self.plot_widget)
self.layout.addWidget(self.export_btn)

def export(self):
img = pg.exporters.ImageExporter(self.plt)
img.export()


if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
ex = SimpleUi()
ex.show()
sys.exit(app.exec_())

在这种情况下,单击“导出”按钮会导致一个对话框快速弹出,然后消失。

如果我改为

img.export(copy=True)

并尝试将剪贴板上的内容粘贴到某些内容中(绘画等),python.exe 崩溃。

奇怪的是,通过 pyqtgraph 默认提供的上下文菜单导出效果很好。另外,只需在终端中工作,我就可以使用与上面相同的代码行复制/保存plotItems。即:

import numpy as np
import pyqtgraph as pg
import pyqtgraph.exporters

plt = pg.plot(np.arange(10))
img = pg.exporters.ImageExporter(plt.plotItem)
img.export()

这对我来说意味着导出器工作正常,但是当以我调用它们的方式从 pyqt4 小部件中调用它们时,会发生一些奇怪的交互。

我已经尝试过 pyqtgraph 0.9.8 以及 github 上的主分支。非常不知道这里的问题是什么

谢谢

最佳答案

看起来您没有将 img 存储在任何地方,因此一旦对 export() 的调用返回,就会收集它。

说明:

  1. Python 中的对象仅在需要时才保留在内存中。当Python确定不再需要某个对象时,它会删除该对象。

  2. Python 如何知道何时不再需要某个对象?通过计算引用文献。当您执行 img = ImageExporter(...) 时,将使用一个引用创建一个新对象:局部变量 img

  3. 在函数内部创建的变量被视为该函数范围的局部变量。当函数退出时,变量img消失,从而导致ImageExporter对象的引用计数降至0,从而导致Python删除该对象。

  4. 通过设置 self.img = ImageExporter(...),您将分配一个对对象范围本地对象的引用。函数(因为被称为 selfSimpleUI 对象在函数返回后继续存在)。只要 SimpleUI 仍保留引用,这就允许对象持续存在。

关于python - pyqtgraph 从 PyQt4 小部件中的 API 导出失败/崩溃 python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27529645/

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