Текст моей пользовательской метки неровный при поворотеPython

Программы на Python
Ответить
Anonymous
 Текст моей пользовательской метки неровный при повороте

Сообщение Anonymous »

Я создал собственную qlabel с помощью pyqt, однако при повороте текст становится немного неровным. Я приложил изображение этого изображения по сравнению с не повернутой этикеткой. Я пытался исправить это с помощью setRenderHint Antialiasing, TextAntialiasing и SmoothPixmapTransform, но, похоже, это не имеет значения. Если бы был способ правильно выровнять текст на одном уровне, это могло бы помочь?
Изображение

class Label(QtWidgets.QLabel):
def __init__(self, parent=None, element=None):
super().__init__(parent)

self.element = element

if self.element is not None:
self.configuration = self._parse_element()

self._text = self.configuration.attrib.get("Text", "")
self._position_x, self._position_y = tuple(
map(int, self.configuration.attrib.get("Position", "177,5").split(","))
)
self._width, self._height = tuple(
map(int, self.configuration.attrib.get("Size", "267,27").split(","))
)
self._size_ratio = self.configuration.attrib.get("SizeRatio", "0.0")
self._font = FontManager(
self.configuration.attrib.get("Font", "Dialog#1#16")
).get_font()
self._rotation = self.configuration.attrib.get("Rotation", "0.0")
self._scale_x = self.configuration.attrib.get("ScaleX", "1.0")
self._scale_y = self.configuration.attrib.get("ScaleY", "1.0")

self._setup_visuals()

def _parse_element(self):
for child in self.element:
if child.tag == "Configuration":
return child
return None

def _setup_visuals(self):
self.setStyleSheet("""
background-color: none;
border: none;
margin: 0px;
""")

self.setText(self._text)

fm = QtGui.QFontMetrics(self._font)
text_width = fm.horizontalAdvance(self._text)
text_height = fm.height()

if float(self._size_ratio) > 0:
self._height = int(self._width / float(self._size_ratio))

self.move(self._position_x, self._position_y)
self.resize(max(self._width, text_width), max(self._height, text_height))

@typing_extensions.override
def paintEvent(self, event):
painter = QtGui.QPainter(self)
painter.setRenderHint(QtGui.QPainter.RenderHint.Antialiasing)
painter.setRenderHint(QtGui.QPainter.RenderHint.TextAntialiasing)
painter.setRenderHint(QtGui.QPainter.RenderHint.SmoothPixmapTransform)

painter.setFont(self._font)

painter.translate(0, 0)
painter.rotate(degrees(float(self._rotation)))
painter.scale(float(self._scale_x), float(self._scale_y))

painter.drawText(0, 0, self.width(), self.height(), QtCore.Qt.AlignmentFlag.AlignLeft | QtCore.Qt.AlignmentFlag.AlignTop, self._text)

@typing_extensions.override
def sizeHint(self):
fm = self.fontMetrics()

w = fm.horizontalAdvance(self.text())
h = fm.height()

a = float(self._rotation)

r_w = abs(w * cos(a)) + abs(h * sin(a))
r_h = abs(w * sin(a)) + abs(h * cos(a))

return QtCore.QSize(int(r_w), int(r_h))



Подробнее здесь: https://stackoverflow.com/questions/798 ... en-rotated
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»