LINUX.ORG.RU

Charset в Tkinter для Python. Как?


0

0

Русифицирую сценария, написанный на Python интерфейс Tkinter.

Пробовала несколько вариантов:

1) Прописать # -*- coding: utf-8 -*-

2) Сохранить весь текст сценария в utf-8

и 2 способа по совету из http://www.anabar.ru/forumz/anafo.py?messid=198

3) tkMessageBox.showinfo(unicode("АБВГД","koi8-r"), unicode("абвгд",koi8-r))

4) и 1 #!/usr/bin/python 2 3 import Tkinter 4 import tkMessageBox 5 if Tkinter.TkVersion < 8.3: 6 tkMessageBox.showinfo("АБВГД", "абвгд") 7 else: 8 tkMessageBox.showinfo(unicode("АБВГД","koi8-r"), unicode("абвгд",koi8-r))

Все-равно, или запускается, но не отображает русские тексты меню правильно, или, в случае сохранения всего в utf-8 - не запускается, находит какой-то символ перед # -*- coding:, которого при открытии файла нет.(символ-призрак прямо)

Для сохранения в utf-8 использовала vim/

Пожалуйста, подскажите,как с этим справиться. спасибо.


Можно попробовать:

unicode('строка', 'koi8-r').encode('utf-8')

Разумеется, поставив то, что нужно, вместо 'koi8-r'.

DKorolkov
()

Вообще-то у меня всегда срабатывала простая передача Tkinter'у Unicode-строк. А можно увидеть хотя-бы минимальный вариант неработающего скрипта?

watashiwa_daredeska ★★★★
()
Ответ на: комментарий от DKorolkov

Спасибо за советы.

В конечном итоге, у меня получилось правильно отобразить кириллицу в диалоге в таком тестовом примере ------------ #!/usr/bin/python # -*- coding: koi8-r -*-

from Tkinter import * import tkMessageBox import sys

root = Tk() tkMessageBox.showinfo(unicode("абвгд","koi8-r"),unicode(&quo t;АБВГД","koi8-r"))

root.mainloop() ------------

С кнопкой проделать тоже самое пока не удалось, пока плохо ориентируюсь в синтакисе.

вот такой тест работает: --------------------------- #!/usr/bin/python # -*- coding: koi8-r -*- from Tkinter import * root = Tk() Button(root, text="dfr", command=root.quit).pack(side=LEFT) root.mainloop() ----------------------------

А если пробую вот так: ---------------------------- #!/usr/bin/python # -*- coding: koi8-r -*- from Tkinter import * root = Tk() Button(root, text=(unicode("абвгд","koi8-r"), command=root.quit).pack(side=LEFT) root.mainloop() ---------------------------- Синтаксис "Button(root, text=(unicode("абвгд","koi8-r"), command=root.quit).pack"

Буду искать в документации, как правильно. Пока ешще не поняла принципа где искать.

С уважением, JCat

JCat
() автор топика
Ответ на: комментарий от JCat

Button

> Button(root, text=(unicode("абвгд","koi8-r"),...

А скобка перед unicode зачем? Или это только в форуме опечатка, а в программе её нет?

Hint: если пишете сюда код, применяйте форматирование "User line break" или "Preformatted text" (список над кнопкой "Post").

DKorolkov
()
Ответ на: комментарий от JCat

> tkMessageBox.showinfo(unicode("абвгд","koi8-r"),unicode(&quo t;АБВГД","koi8-r"))

Учитывая coding в начале файла, можно проще:

tkMessageBox.showinfo( u"абвгд", u"АБВГД" )

Хотя я бы всё-таки предложил избавиться от локализованных русских строк в исходниках, а делать перевод средствами gettext.

watashiwa_daredeska ★★★★
()
Ответ на: комментарий от watashiwa_daredeska

Спасибо за совет.

Сегодня прочту документацию о gettext и попробую на тестах.

JCat
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.