Как настроить шрифт, используемый для визуализации текста IME Preview в полях ввода текста Tkinter в Windows?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как настроить шрифт, используемый для визуализации текста IME Preview в полях ввода текста Tkinter в Windows?

Сообщение Anonymous »

Описание проблемы < /h2>
Я испытываю проблему, касающуюся конфигурации шрифта в Tkinter. Конструктор всех виджетов Tkinter имеет аргумент ключевого слова , который позволяет настроить шрифт, используемый для отображения текста. однако , этот параметр, по -видимому, не влияет на текстовый текст ime preview , используемый в виджетах ввода текста (например, вход и text ).
Для тех, чей нативный язык не требует IME (метод ввода), я не буду кратко объяснить: Напечатано. И когда вы закончите, вы нажимаете Enter, и завершенная фраза отправляется в приложение. В то время как вы сочиняете эту фразу, это обязанность приложения за то, чтобы представить текст «предварительный просмотр» способом, который визуально отличается от текста, который уже был представлен в текстовое поле. Однако , проблема, с которой я сталкиваюсь, заключается в том, что Tkinter всегда отображает текст предварительного просмотра IME, используя шрифт «по умолчанию», независимо от шрифта, что виджет настроен на использование. src = "https://i.sstatic.net/jp4qnbz2.png"/>
А вот скриншот, чтобы сделать то же самое в приложении TK, которое я написал как MRE:

Как можно увидеть, в то время как Notepad использует один и тот же шрифт как для фактического текста, так и для IME Preview Text, Tkkinter использует шрифт Default для последнего, который является повседневным, что в повседневном положении

Код: Выделить всё

def resize_builtin_fonts(root: tk.Tk | tk.Widget, size: int) -> None:
"""Sets the size of all registered font names."""
for font_name in tk.font.names(root):
font_obj = tk.font.nametofont(font_name)
font_obj.configure(size=size)
Затем я добавил функцию вызова resize_builtin_fonts (root, 16) после кода для настройки корневого окна и перед вызовом root.mainloop () . К моему удивлению, в то время как это (как и ожидалось), вызвало все виджеты без явного аргумента FONT = в конструкторе для отображения текста в 16⁠PTS, он не влиял на текст предварительного просмотра IME. Таким образом, по-видимому, текст предварительного просмотра IME работает отдельно от реестра шрифтов Tkinter. Я не мог найти ничего, что выглядело так, но я мог что -то пропустить, конечно. Самое близкое, что я нашел, была эта страница на вики Tcler, рассказывающего о том, насколько хорошо TK 8.3 поддерживает Windows IME (подчеркнуть мою): < /p>

tk 8.3.4+ обладает поддержкой Windows Ime и Linux xim. В 8.3 это использует стиль root-Window , но 8.4 имеет поддержку в стиле «излишнего» IME и XIM. Эта поддержка была возможна при значительной помощи Коичи Ямамото и Кейичи Такахаши. Koichi подтвердил, что поддержка 8.4, как известно, работает на Win95, чтобы Winxp с использованием Windows Ime, японского Win9*и вариантов ATOK13 IME. < /P>
< /blockquote>
Так что теперь я знаю, что текст IME, вероятно, использует стиль корневого окна. Предполагая, что этот термин означает стиль ttk для корневого окна, я посмотрел имя объекта ttk класса tkinter.tk с использованием print (root.winfo_class ()) и обнаружил, что это tk . Поэтому я попытался добавить это в свой код: < /p>

Код: Выделить всё

import tkinter.ttk as ttk
style = ttk.Style()
style.configure("Tk", font="input_font")
Но это не имело никакого эффекта, поэтому, очевидно, нет такой опции для стиля TK . Кроме того, объект TK даже не имеет параметра Code , и после тестирования объект TK , кажется, не подчиняется каким -либо конфигурациям, сделанным в стиле TK , поэтому кажется, что объект tkinter.tk освобождается от TTK . На вики Tcler о тексте предварительного просмотра IME после стиля корневого окна (предполагая, что я правильно его интерпретировал, его фраза была немного неясной), я уже догадался, что, возможно, под «стилем корневого окна», это означало конфигурацию tkkinter.tk , поэтому я попытался добавить:

root.configure(font=input_font)

Но это повышает исключение tkinter.tclerror с помощью «Неизвестное». Я также попытался просматривать документацию TK, чтобы увидеть, есть ли соответствующая команда, которую я мог бы позвонить из Python, используя root.tk.eval ("command") . Но так как я не знаю ни одного TCL (и также никогда не использовал пакет TK напрямую), я обнаружил, что документация TK трудно понять. Так что, надеюсь, кто -то здесь знает решение.
Я попытался проверить свой MRE на виртуальной машине Linux, чтобы увидеть, существует ли такая же проблема, но я просто не мог получить IBUS IME Framework для работы вообще после установки в Linux Mint.>

Подробнее здесь: https://stackoverflow.com/questions/796 ... text-input
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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