2017-07-03 2 views
0

Ich habe ein QGraphicsView/QGraphicsScene-Paar. Ich habe die Methode QGraphicsView.drawBackgroud überschrieben, um ein rechteckiges Raster zu zeichnen. Alles ist in Ordnung bis zu diesem Punkt, aber wenn ich versuche, die tatsächlichen Koordinaten mit der QPainter.drawText-Methode zu zeichnen, steht der resultierende Text auf dem Kopf. Ein anderes Problem ist, dass ich nicht möchte, dass der Text für Koordinatenwerte mit Zoomen skaliert, aber ich konnte das nicht erreichen.qpainter drawText Textrichtung und -größe

Meine Ansicht ist zunächst skaliert (1, -1).

Ich arbeite an pyside

Dies ist mein Code für DrawBackground:

pen = QtGui.QPen(QtGui.QColor(0,0,0)) 
painter.setPen(pen) 
gridInterval = 10 
#painter.setWorldMatrixEnabled(True) 

l, r = rect.left(), rect.right() 
t, b = rect.bottom(), rect.top() 

dx = (r - l)/gridInterval 
dy = (t - b)/gridInterval 
left = int(l) + dx/2 
bottom = int(b) + dy/2 
nx = gridInterval 
ny = gridInterval 
dx = (r - l)/gridInterval 
dy = (t - b)/gridInterval 
myxrange = [left + i * dx for i in range(nx)] 
myyrange = [bottom + j * dy for j in range(ny)] 

xlabels = ["{0:.2f}".format(x) for x in myxrange] 
ylabels = ["{0:.2f}".format(y) for y in myyrange] 

xlines = [] 
for point in myxrange: 
    line = QtCore.QLineF(point, t, point, b) 
    xlines.append(line) 

ylines = [] 
for point in myyrange: 
    line = QtCore.QLineF(l, point, r, point) 
    ylines.append(line) 

painter.drawLines(xlines) 
painter.drawLines(ylines) 

#font = QtGui.QFont() 
#font.setPointSize(20) 
#painter.setFont(font) 

for k, text in enumerate(xlabels): 
    #painter.save() 
    #painter.rotate(90) 
    painter.drawText(myxrange[k], myyrange[0], text) 
    #painter.rotate(-90) 
    #painter.restore() 

Antwort

0

Ok, so fand ich eine Lösung, die für den "gedreht" Text funktioniert. Ich hatte den Maler neu zu skalieren, bevor Sie den Text zeichnen und es tatsächlich auf der übersetzte Lage zeichnen:

So die for-Schleife wie folgt aussieht:

for k, text in enumerate(xlabels): 
    painter.save() 
    painter.scale(1,-1) 
    painter.drawText(myxrange[k], -myyrange[0], text) 
    painter.restore() 

Ich bin immer noch auf eine Antwort auf die feste Größe suchen Problem.