График не верно выводит текст (pyqtgraph)
Выручайте уже 3-й день бьюсь над проблемой.
В общем все линии на графике выводятся отлично. но когда вызываешь drawText. Выводится то что на скрине. это код функции с основной программы. где происходит неправильный вывод.
import pyqtgraph as pg
from pyqtgraph import QtCore, QtGui
from DATA import inf
class CandlestickItem (pg.GraphicsObject):
def __init__(self):
pg.GraphicsObject.__init__(self)
def set_data(self, line):
self.line = line
self.generate_picture_line_order()
self.informViewBoundsChanged()
def generate_picture_line_order(self):
self.picture = QtGui.QPicture()
p = QtGui.QPainter(self.picture)
for line in self.line:
if line > inf['ticket_price']:
p.setPen(pg.mkPen('#CE1212', width=0.7, style=QtCore.Qt.DashLine))
else:
p.setPen(pg.mkPen('#32B70A', width=0.7, style=QtCore.Qt.DashLine))
p.drawLine(QtCore.QPointF(570, line), QtCore.QPointF(605, line))
p.setPen(pg.mkPen('#BDB76B', width=0.7))
text = QtGui.QStaticText()
text.setText(str(line))
p.drawStaticText(605, line, text)
p.end()
def paint(self, p, *args):
p.drawPicture(0, 0, self.picture)
def boundingRect(self):
return QtCore.QRectF(self.picture.boundingRect())
Вот пример который я накидал чтобы просто запустить и погонять в отладчике. Но тут еще интереснее получается, если включить вывод текста то вообще программа не стартует.
import pyqtgraph as pg
from pyqtgraph import QtCore, QtGui
class CandlestickItem (pg.GraphicsObject):
def __init__(self):
pg.GraphicsObject.__init__(self)
self.generate_picture_line_order()
self.informViewBoundsChanged()
def generate_picture_line_order(self):
self.picture = QtGui.QPicture()
p = QtGui.QPainter(self.picture)
p.setPen(pg.mkPen('#CE1212', width=0.7, style=QtCore.Qt.DashLine))
p.drawLine(QtCore.QPointF(0, 50), QtCore.QPointF(50, 50))
p.setPen(pg.mkPen('#BDB76B', width=0.7))
text = QtGui.QStaticText()
text.setText('Text')
#p.drawStaticText(51, 50, text) # Здесь проблема!
p.end()
def paint(self, p, *args):
p.drawPicture(0, 0, self.picture)
def boundingRect(self):
return QtCore.QRectF(self.picture.boundingRect())
item = CandlestickItem()
plt = pg.plot()
plt.addItem(item)
plt.setWindowTitle('pyqtgraph example: customGraphicsItem')
QtGui.QApplication.instance().exec_()
Еще параллельно вопрос к знатокам. Как в pyqtgraph сделать такое
через AxisItem? или можно просто добавить?
И еще один если все подписать как textItem, не используя drawText, который не работает. Это придется для каждой надписи создавать свой итем? или можно просто все впихать в один.
В общем уже кучу форумов перерыл и в официальной документации к pyqtgraph толком нечего отвечающего на мой вопрос нет. Может кто работал с этим инструментом. Заранее спасибо за помощь!
Ответы (1 шт):
Как вариант:
import sys
from pyqtgraph import QtCore, QtGui
import pyqtgraph as pg
class CandlestickItem (pg.GraphicsObject):
def __init__(self):
pg.GraphicsObject.__init__(self)
self.generate_picture_line_order()
self.informViewBoundsChanged()
def generate_picture_line_order(self):
self.picture = QtGui.QPicture()
p = QtGui.QPainter(self.picture)
p.setPen(pg.mkPen('#CE1212', width=0.7, style=QtCore.Qt.DashLine))
p.drawLine(QtCore.QPointF(0, 50), QtCore.QPointF(50, 50))
p.setPen(pg.mkPen('#BDB76B', width=0.7))
text = QtGui.QStaticText()
text.setText('Text')
p.drawStaticText(51, 50, text) # !!!
p.end()
def paint(self, p, *args):
p.drawPicture(0, 0, self.picture)
def boundingRect(self):
return QtCore.QRectF(self.picture.boundingRect())
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv) # Это первое что вы должны сделать !
# Добавить элемент графика для отображения меток осей ...
plot = pg.PlotItem() # PlotItem
plot.setLabel(axis='left', text='Y-axis')
plot.setLabel(axis='bottom', text='X-axis')
plot.setTitle('PyQtGraph example: drawStaticText')
plot.showGrid(x=True,y=True)
item = CandlestickItem()
imv = pg.ImageView(view=plot)
vbox = imv.getView()
vbox.addItem(item)
vbox.addItem(pg.LabelItem("This is a nice label"))
imv.show()
sys.exit(app.exec_())


