python-tk 2.5 уже давно в Debian stable. Так что пересобирать пакеты самостоятельно теперь не надо.Как известно, есть такая библиотека для графических интерфейсов, Tk. На Tcl/Tk легко писать скрипты с графическим интерфейсом. Так же Tk используется в качестве стандартной (доступной по умолчанию на всех платформах и не требующей установки) графической библиотеки в Python. Приложений написанных с использованием Tk довольно много. Раз читаете этот пост — значит, видели (смотрим, например,
aptitude search ~Dpython-tk и aptitude search ~D^tk).Однако русским пользователям Debian и Ubuntu с Tk явно не повезло. По умолчанию, из коробки, русские буквы в ней отображаются очень криво. Вот, к примеру простейшее приложение-однострочник:
$ echo 'button .b -text "привет, world!" ; pack .b ' | wishи наблюдаем вот такой результат:

Хороших слов для таких шрифтов не находится. Такое ощущение, русские буквы берутся из какого-то китайского шрифта, при этом никакого сглаживания и хинтинга. Проблема настолько острая, что даже разобрана в LOR Wiki. В случае Tcl/Tk достаточно начать использовать Tk 8.5 вместо 8.4. В Debian/Ubuntu это делается так:
$ sudo update-alternatives --config wishПовторяем наш проверочный пример, и получаем вполне пристойный результат:
Есть 3 альтернатив, которые предоставляют `wish'.
Выбор Альтернатива
-----------------------------------------------
* 1 /usr/bin/wish8.4
+ 2 /usr/bin/wish-default
3 /usr/bin/wish8.5
Нажмите enter, чтобы сохранить значение по умолчанию[*], или введите выбранное число: 3
Используется `/usr/bin/wish8.5' для предоставления `wish'.

Понятно, что перед этим нужно поставить пакеты
tcl8.5 и tk8.5. Это минутное дело.Однако приложениям на Python, использующим Tk, вышеописанный фокус не поможет. В Debian (Lenny) и Ubuntu (Hardy, Intrepid) пакет
python-tk собран с поддержкой только tk8.4, то есть по-умолчанию такие приложения выглядят вот так:
Чтобы это исправить, нужно поставить пакет
python-tk собранный с поддержкой Tk 8.5. В Debian такой пакет есть, но только в experimental. Я скачал оттуда pytnon-tk 2.5.4-1 и нужный ему blt 2.4z-4 вручную и поставил. Никаких лишних зависимостей они не тянут, а Tk-приложения обретают новую жизнь:
В Ubuntu (Intrepid) ситуация похожая. Пакет
python-tk собранный с Tk 8.5 повляется лишь в Jaunty. И сразу python-tk 2.6.1-0ubuntu1. Конечно, в таких случаях религия предписывает пересобирать пакет самостоятельно.



Спасибо за статью! А то уже совсем достали ужасные шрифты в Idle (Python IDE).
ОтветитьУдалитьНо после того как я поставил python-tk 2.6.1-0ubuntu1, этот самый Idle перестал делать автодополнение текста и подсказки тоже изчезли :( Вместо них в консоли пишет жуткие
File "/usr/lib/python2.5/lib-tk/Tkinter.py", line 1417, in __call__
return self.func(*args)
File "/usr/lib/python2.5/idlelib/AutoCompleteWindow.py", line 218, in winconfig_event
x, y, cx, cy = self.widget.bbox(self.startindex)
File "/usr/lib/python2.5/lib-tk/Tkinter.py", line 2858, in bbox
self.tk.call((self._w, 'bbox') + args)) or None
File "/usr/lib/python2.5/lib-tk/Tkinter.py", line 1033, in _getints
return tuple(map(getint, self.tk.splitlist(string)))
ValueError: invalid literal for int() with base 10: '(87,'
T_T
Видно, всё таки нельзя ставить пакет python 2.6. То есть всё таки не работает. Жаль. То есть видно, надо честно пересобрать пакеты python.
ОтветитьУдалитьВ качестве халявного варианта можно ещё попробовать поставить python-tk и blt из Debian. Они всё же 2.5 и почти тех же версий. Сейчас попробовал на машине с Intrepid, поставились и ничего моего не сломалось.
Не знаю, как будет с IDLE.
Поставил IDLE. Подтверждаю, проблема с автодополнением есть. Хорошо, что в IPython всё работает :-)
ОтветитьУдалитьА можно просто в иксах шрифты настроить... ох
ОтветитьУдалить~/.Xresources вам всем в руки!
Рабочий конфиг в студию :) Только чтобы шрифт во всех приложениях был гарантированно вменяем. Не надо забывать, что некоторые пытаются определённые шрифты задавать.
ОтветитьУдалитьКак же быть c модулем Perl Tkx в Windows? Довольно остро стоит проблема русского языка в моём приложении. Нужно прочитать русские данные из .csv, обработать (сохранить в хеше) и вывести в GUI.
ОтветитьУдалитьЗдравствуйте, Олег. К сожалению, не могу вам подсказать. Perl с Tk я
ОтветитьУдалитьне использовал, и под виндоус тоже.
2011/4/15 Disqus <>:
Спасибо!
ОтветитьУдалить