from qgis.PyQt.Qt import QTextDocument
from qgis.PyQt.QtGui import QFont
mQFont = "Sans Serif"
mQFontsize = 9
mLabelQString = "© QGIS 2019"
mMarginHorizontal = 0
mMarginVertical = 0
mLabelQColor = "#FF0000"
INCHES_TO_MM = 0.0393700787402 # 1 毫米 = 0.0393700787402 英寸
case = 2
def add_copyright(p, text, xOffset, yOffset):
p.translate( xOffset , yOffset )
text.drawContents(p)
p.setWorldTransform( p.worldTransform() )
def _on_render_complete(p):
deviceHeight = p.device().height() # 获取绘制设备高度
deviceWidth = p.device().width() # 获取绘制设备宽度
# 创建一个新的富文本容器
text = QTextDocument()
font = QFont()
font.setFamily(mQFont)
font.setPointSize(int(mQFontsize))
text.setDefaultFont(font)
style = "<style type=\"text/css\"> p {color: " + mLabelQColor + "}</style>"
text.setHtml( style + "<p>" + mLabelQString + "</p>" )
# 文本大小
size = text.size()
# 渲染
pixelsInchX = p.device().logicalDpiX()
pixelsInchY = p.device().logicalDpiY()
xOffset = pixelsInchX * INCHES_TO_MM * int(mMarginHorizontal)
yOffset = pixelsInchY * INCHES_TO_MM * int(mMarginVertical)
# 计算点位
if case == 0:
# 左上
add_copyright(p, text, xOffset, yOffset)
elif case == 1:
# 左下
yOffset = deviceHeight - yOffset - size.height()
add_copyright(p, text, xOffset, yOffset)
elif case == 2:
# 右上
xOffset = deviceWidth - xOffset - size.width()
add_copyright(p, text, xOffset, yOffset)
elif case == 3:
# 右下
yOffset = deviceHeight - yOffset - size.height()
xOffset = deviceWidth - xOffset - size.width()
add_copyright(p, text, xOffset, yOffset)
elif case == 4:
# 上中心点
xOffset = deviceWidth / 2
add_copyright(p, text, xOffset, yOffset)
else:
# 下中心点
yOffset = deviceHeight - yOffset - size.height()
xOffset = deviceWidth / 2
add_copyright(p, text, xOffset, yOffset)
# 当画布渲染完成后发送信号
iface.mapCanvas().renderComplete.connect(_on_render_complete)
# 重绘画布
iface.mapCanvas().refresh()