pyqtgraph - 仅在重新加载

时间:2016-09-23 08:53:00

标签: python qgis pyqtgraph

我发现我不是the only one在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

1 个答案:

答案 0 :(得分:0)

pyqtgraph documentation说明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 import plugin4Dialog import 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_())