Nano Hash - криптовалюты, майнинг, программирование

Установка шрифта для QTextEdit игнорируется без видимой причины

Я пытаюсь установить шрифт QTextEdit таким же, как QTreeWidget.

Когда я получаю шрифт от QTextEdit и пытаюсь установить его на QTreeWidget, он не работает. Однако, если я создам новый шрифт QFont("Segoe UI", 9), который окажется таким же, как QTreeWidget на моей платформе (Windows 7), и установлю для него значение QTextEdit, он будет работать.

Следующий код печатает True для сравнения шрифтов, но не работает должным образом. Раскомментирование self.text.setFont(new_font) исправляет это. Почему?

import string
import sys

from PyQt5.QtWidgets import *
from PyQt5.QtGui import QFont


TEXT = string.printable[:-5]

def print_font(font):
    print("Family: {}, Size: {}".format(font.family(), font.pointSize()))


class Window(QWidget):
    def __init__(self, *args, **kwargs):
        QWidget.__init__(self, *args, **kwargs)

        self.list = QTreeWidget(self) 
        self.list.addTopLevelItem(QTreeWidgetItem((TEXT,)))
        self.list.setRootIsDecorated(False)
        self.list.setHeaderHidden(True)
        self.list.setMinimumHeight(25)

        self.text = QTextEdit(self)
        self.text.setText(TEXT)
        self.text.setMinimumHeight(25)

        self.layout = QGridLayout()
        self.layout.setContentsMargins(5, 5, 5, 5)
        self.layout.addWidget(self.list)
        self.layout.addWidget(self.text)

        self.resize(620, 20)
        self.setLayout(self.layout)
        self.show()

        list_font = self.list.font()
        new_font = QFont("Segoe UI", 9)
        print(list_font == new_font)
        self.text.setFont(list_font)
#         self.text.setFont(new_font)

        print_font(self.list.font())
        print_font(self.text.font())


app = QApplication(sys.argv)
win = Window()
sys.exit(app.exec_())
30.10.2014

Ответы:


1

Вы не можете с уверенностью предположить, что свойства, сообщаемые QFont, совпадают с теми, которые фактически используются. Они могут быть, но это не гарантировано.

Чтобы безопасно получить фактические используемые значения, вам необходимо использовать QFontInfo. В Linux я получаю разные значения от QFont и QFontInfo, но передача шрифта выполняется успешно; в Windows они одинаковы, но передача не удалась. Хм.

В любом случае, похоже, есть проблема с копированием шрифтов в Windows, но я не могу точно определить, что это может быть. Может быть, что-то с кешем шрифтов?

Я думал так:

    list_font = QFont(self.list.font())

может иметь значение - но это не так. В конце концов, единственное, что сработало для меня в Windows, это:

    list_font = QFont()
    list_font.fromString(self.list.font().toString())
    self.text.setFont(list_font)
30.10.2014
  • Хорошее понимание. Спасибо. 31.10.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..