pyqtgraph布局间距和对齐问题

时间:2018-07-20 15:31:25

标签: python layout pyqtgraph right-justified

我正在尝试绘制带有3条标签或标题的图。 我希望第三行由两部分组成, 第一个左对齐,第二个右对齐。

Example1.jpg

显示的图形没有第三行。

我首先尝试使用第三行的标签在两部分之间留有一定数量的空格。这显然不是理想的,并且没有用。如example2.jpg

两个部分之间的所有空间都压缩为一个空间。

然后,我尝试使用“子布局”,其中一个部分在col = 0中,另一部分在col = 1中。效果更好,但事实并非如此。参见example3.jpg

此布局的高度非常大,从而压缩了图形。 另外,第二部分并没有真正正确的理由,只是放在右边。

我考虑过调整“子布局”或包含“子布局”的行的高度,但是pyqtgraph.GraphicsLayout类没有任何高度调整功能。我想我可以在pyqtgraph.GraphicsLayout对象中使用“内部布局对象”(QtGui.QGraphicsGridLayout),但这样做会冒犯面向对象的敏感性。

我还能尝试其他布局魔术吗?

我很高兴有任何想法(带有示例代码)可以帮助我实现自己的目标。

这是我正在使用的代码。

#!/usr/bin/env python3

# Adapted from https://pythonprogramminglanguage.com/pyqtgraph-bar-chart/

# pyqtgraph examples : bar chart
# pythonprogramminglanguage.com
import pyqtgraph as pg
from pyqtgraph.Qt import QtCore, QtGui
import numpy as np

pg.setConfigOption('background', 'w')
win = pg.GraphicsWindow()
layout1 = win.addLayout(row=0, col=0)
layout1.addLabel("LINE 1", row=0, col=1, size='48pt', bold=True, color='FF0000')
layout1.addLabel("Line 2", row=1, col=1, size='32pt', bold=True)

# add a third line, how to spread out the text?
# add the third line using a LabelItem
# layout1.addLabel("Left J          Right J", row=2, col=1, size='24pt')

# add another layout so we can get some text left justified
# and some text right justified
# add the third line using a layout, and two LabelItems
# layout2 = layout1.addLayout(row=2, col=1)
# layout2.addLabel("Left J", row=0, col=0, size='24pt')
# layout2.addLabel("Right J", row=0, col=1, size='24pt')

# win = pg.plot()
win.setWindowTitle('pyqtgraph BarGraphItem')

# create list of floats
# y1 = np.linspace(0, 20, num=20)
y1 = [0.3, 0.15, 0.55]

# create horizontal list
# x = np.arange(20)
x = [1, 2, 3]

# create bar chart
bg1 = pg.BarGraphItem(x=x, height=y1, width=0.6, brush='r')
plt1 = layout1.addPlot(row=3, col=1)
plt1.addItem(bg1)
layout1.addLabel("x axis", row=4, col=1, size='16pt')
layout1.addLabel("y axis", row=3, col=0, size='16pt', angle=-90)

## Start Qt event loop unless running in interactive mode or using 
if __name__ == '__main__':
    import sys
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
        QtGui.QApplication.instance().exec_()

0 个答案:

没有答案