У меня есть небольшое приложение, которое я создал с использованием 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)
И попробуйте вставить что-нибудь из буфера обмена во что-нибудь (Paint, что угодно), 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. Очень растерялся, в чем тут дело
Спасибо