我正在尝试绘制带有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_()