Я испытываю проблему, касающуюся конфигурации шрифта в 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)
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")
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