pyqtgraph — цвет фона загружается только после перезагрузки

Я вижу, что я не единственный, у кого есть проблема с цветом фона в pyqtgraph - я пишу программный плагин QGIS, который имеет дополнительное диалоговое окно с графиком. Я пытаюсь установить цвет фона, и он загружается только после перезагрузки подключаемого модуля с помощью подключаемого модуля QGIS Plugin Reloader (этот подключаемый модуль создан для людей, разрабатывающих подключаемые модули, поэтому после любого изменения кода вы обновляете его и получаете новый один загружается в QGIS. Он не используется обычным пользователем).

Мой фрагмент кода ниже:

import pyqtgraph

...

def prepareGraph(self): # loads on button click

    self.graphTitle = 'Graph one'

    # prepare data - simplified, but data display correctly
    self.y = something
    self.x = something_else

    self.buildGraph() 


def buildGraph(self):
    """ Add data to the graph """
    pyqtgraph.setConfigOption('background', (230,230,230))
    pyqtgraph.setConfigOption('foreground', (100,100,100))
    dataColor = (102,178,255)
    dataBorderColor = (180,220,255)
    barGraph = self.graph.graphicsView
    barGraph.clear()
    barGraph.addItem(pyqtgraph.BarGraphItem(x=range(len(self.x)), height=self.y, width=0.5, brush=dataColor, pen=dataBorderColor))
    barGraph.addItem(pyqtgraph.GridItem())
    barGraph.getAxis('bottom').setTicks([self.x])
    barGraph.setTitle(title=self.graphTitle)

    self.showGraph()


def showGraph(self):
    self.graph.show()

Интересно, что все части buildGraph() загружаются без проблем (даже цвет переднего плана!) не загружается только цвет фона.

Это известная ошибка или есть разница между установкой цвета переднего и заднего плана? Связанный вопрос не помог мне решить эту проблему.

pyqtgraph==0.9.10 PyQt4==4.11.4 Python 2.7.3


person adamczi    schedule 23.09.2016    source источник


Ответы (1)


В документации pyqtgraph говорится о setConfigOption настройках, что :

Обратите внимание, что это должно быть установлено перед созданием каких-либо виджетов.

В моем коде у меня есть

def buildGraph(self):

    pyqtgraph.setConfigOption('background', (230,230,230))
    pyqtgraph.setConfigOption('foreground', (100,100,100))

    barGraph = self.graph.graphicsView

и я думал, что это место «до», но это создание объекта, а не виджета. Нужно написать setConfigOption внутри класса, отвечающего за хранение объекта pyqtgraph. В моем случае это была функция __init__ внутри отдельного файла, создающая отдельное диалоговое окно:

из PyQt4 импортировать QtGui, QtCore из plugin4_plot_widget импортировать Ui_Dialog из plugin4_dialog импортировать plugin4Dialog импортировать pyqtgraph

class Graph(QtGui.QDialog, Ui_Dialog):
    def __init__(self):
        super(Graph, self).__init__()
        pyqtgraph.setConfigOption('background', (230,230,230))
        pyqtgraph.setConfigOption('foreground', (100,100,100))        

    self.setupUi(self)

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    main = Graph()
    main.show()
    sys.exit(app.exec_())
person adamczi    schedule 23.09.2016