Bug 6339 - Проблемы с tkinter + setlocale()
Summary: Проблемы с tkinter + setlocale()
Status: CLOSED WORKSFORME
Alias: None
Product: Sisyphus
Classification: Development
Component: python-modules-tkinter (show other bugs)
Version: unstable
Hardware: all Linux
: P2 normal
Assignee: Fr. Br. George
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2005-03-28 20:36 MSD by Eugene Vlasov
Modified: 2008-05-29 01:40 MSD (History)
5 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Eugene Vlasov 2005-03-28 20:36:12 MSD
После перехода на python 2.4 заметил следующую неприятную особенность: при
попытке использовать в программах с интерфейсом на базе Tkinter простого
вызова locale.setlocale(locale.LC_ALL, '') на stderr выдается:

error reading package index file /usr/share/tcl/vfs1.3/pkgIndex.tcl:
syntax error in expression "[package provide Tcl] < 8.4": extra tokens at
end of expression

Ошибка выдается в момент инициализации Tk (в момент создания первого объекта
Tkinter, будь то Frame или Button или Tk), без setlocale() никакой ошибки не
выдается.
Кроме того, после вызова setlocale() не работает клавиша BackSpace в полях ввода
(например Entry).

Вот простой testcase:

#!/usr/bin/python
# -*- coding: koi8-r -*-

import locale
import time
from Tkinter import *

class fmMain(Frame):
    def createWidgets(self):
        self.txtOne = Entry(self)
        self.txtOne.pack()
        self.txtOne["width"] = 10
        self.btnOne = Button(self)
        self.btnOne["text"] = unicode("Проба", "KOI8-R")
        self.btnOne["command"] = self.GetOne
        self.btnOne.pack()

    def __init__(self, master = None):
        Frame.__init__(self, master)
        self.pack()
        self.createWidgets()

    def GetOne(self):
        print time.strftime('%A')

locale.setlocale(locale.LC_ALL, "")
main = fmMain()
main.mainloop()

Выдает упомянутую ошибку, не работает забой в поле ввода. Если закомментировать
вызов setlocale(), ошибки больше нет, забой работает (и день недели при нажатии
на кнопку разумеется выдается в локали C).

eugene ~/update $ rpm -q python-modules-tkinter
python-modules-tkinter-2.4.0-alt9
Comment 1 Eugene Vlasov 2005-04-07 14:13:26 MSD
2.4.1-alt3 - ошибка уже не выдается, но BackSpace в полях ввода по прежнему не
работает после вызова setlocale()
Comment 2 Andrey Orlov 2005-04-19 15:59:31 MSD
Мндя. Подтверждаю, буду разбираться.... 
Comment 3 Andrey Orlov 2005-06-19 01:35:49 MSD
Мы с братвой закоммитили это в апстрим :(, бум 
ждать...https://sourceforge.net/tracker/index.php?func=detail&aid=1222721&group_id=5470&atid=105470 
Comment 4 Slava Semushin 2008-03-11 14:49:18 MSK
Reassign to real maintainer.
Comment 5 Fr. Br. George 2008-05-28 22:37:46 MSD
В 2.5.1 вроде само куда-то исправилось
Comment 6 Eugene Vlasov 2008-05-29 01:40:48 MSD
Да, уже не воспроизводится.