Как изменить толщину обводки текста? - PullRequest
0 голосов
/ 02 апреля 2020

Я хочу изменить толщину текста.

В css есть свойство для этого

-webkit-text-stroke-width

Есть ли аналог в PyQt5

Менять более тонкий шрифт нельзя, так как я использую уникальный шрифт, который не имеет жирной итальянской версии c и т. Д.

import sys
from PyQt5.QtWidgets import (QRadioButton, QHBoxLayout, QButtonGroup, 
    QApplication, QGraphicsScene,QGraphicsView, QGraphicsLinearLayout, QGraphicsWidget, QWidget, QLabel)
from PyQt5.QtGui import QIcon, QPixmap
from PyQt5.QtCore import QSize, QPoint,Qt
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QPainter


class Window(QWidget):
    def __init__(self):
        super().__init__()

        self.resize(800, 800)
        label = QLabel(self)
        label.setText('<div>&#xe202;</div>')

        font_id = QFontDatabase.addApplicationFont(url)
        if font_id == -1:
            print('not fond')



        font = QFont("my-font",18)



        label.setStyleSheet('''font-size: 80pt; font-family: my-font;''')



if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = Window()
    w.show()
    sys.exit(app.exec_())

1 Ответ

1 голос
/ 02 апреля 2020

Вы можете попробовать свойство font-weight, значения 100-900 имеют различную толщину. Есть эквивалентный метод с QFont.setWeight().

class Template(QWidget):

    def __init__(self):
        super().__init__()
        grid = QGridLayout(self)
        grid.addWidget(QLabel('Hello World'), 0, 0, Qt.AlignHCenter)
        for i in range(1, 10):
            lbl = QLabel(f'({i * 100}) Hello World')
            lbl.setStyleSheet(f'font-weight: {i * 100}')
            grid.addWidget(lbl, i, 0)
        self.setStyleSheet('''
        QLabel {
            font-size: 24pt;
            font-family: Helvetica Neue;
        }''')

Он выглядит так:

enter image description here

Хотя это не будет работать для все шрифты. В качестве альтернативы вы можете создать подкласс QLabel и переопределить paintEvent, чтобы нарисовать контур текста в цвете окна.

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *

class ThinLabel(QLabel):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    def paintEvent(self, event):
        qp = QPainter(self)
        qp.setRenderHint(QPainter.Antialiasing)
        path = QPainterPath()
        path.addText(event.rect().bottomLeft(), self.font(), self.text())
        qp.setPen(QPen(self.palette().color(QPalette.Window), 2))
        qp.setBrush(self.palette().text())
        qp.drawPath(path)


class Template(QWidget):

    def __init__(self):
        super().__init__()
        grid = QGridLayout(self)
        grid.addWidget(QLabel('Hello World'), 0, 0)
        grid.addWidget(ThinLabel('Hello World'), 1, 0)
        self.setStyleSheet('''
        QLabel {
            font-size: 80pt;
            font-family: Helvetica Neue;
        }''')

if __name__ == '__main__':
    app = QApplication(sys.argv)
    gui = Template()
    gui.show()
    sys.exit(app.exec_())

enter image description here

...