Bug 6339

Summary: Проблемы с tkinter + setlocale()
Product: Sisyphus Reporter: Eugene Vlasov <eugvv>
Component: python-modules-tkinterAssignee: Fr. Br. George <george>
Status: CLOSED WORKSFORME QA Contact: qa-sisyphus
Severity: normal    
Priority: P2 CC: cow, george, glebfm, imz, vseleznv
Version: unstable   
Hardware: all   
OS: Linux   

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
Да, уже не воспроизводится.