Система Linux crunchbang 3.2.0-0.bpo.4-686-pae #1 SMP Debian 3.2.39-2~bpo60+1 i686 GNU/Linux (основана на стабильной ветке Debian Squeeze).
Установил дополнительные пакеты *-dev, необходимые для модулей. Создал каталог в /opt. Старый python 2.6 не удалял, только заменил симлинк /usr/bin/python и создал симлинк /usr/bin/idle. Сделал ./configure --prefix=/opt/python3.3.0. Все собралось без проблем, указания на то, что не хватает модулей, не было. Поменял путь python в скриптах. Пробую запустить скрипт, который уже успешно работал в винде с python 3.3 и в линуксе с python 2.6. Суть его в том, что надо создать элемент tkinter Text, вставить в него текст из буфера обмена и производить дальнейшие манипуляции. Запускаю. Получаю следующее: http://i068.radikal.ru/1303/c6/08cc84a29d0a.png. Как видно, какая-то проблема с шрифтами (может быть, дело в том, что для tkinter я шрифт напрямую не указывал, только его размер). Но это не так важно. Хуже то, что теперь я не могу вставить текст из буфера обмена в этот элемент tkinter (что характерно, копирование из него все еще работает). Копирование/вставка осуществлялись посредством самого tkinter, специально для этого я ничего не делал. В чем может быть проблема? Может быть, некорректно установил?
Скрипт такой:
# Текстовое поле (крупное)
def text_field(title):
root, res = tk.Tk(), [None]
# Обратить внимание, что get() работает по-разному для Text и Entry
def callback(): res[0] = entry.get(1.0,tk.END); root.destroy()
root.title(title)
scrollbar = tk.Scrollbar(root,jump=0)
# Маленькое окно: entry=tk.Text(root,width=40,height=15,font="12")
entry=tk.Text(root,font="12",wrap=tk.WORD,yscrollcommand=scrollbar.set)
# Позволяет использовать мышь для управления скроллбаром
scrollbar.config(command=entry.yview)
scrollbar.pack(side=tk.RIGHT,fill=tk.Y)
entry.pack()
# Выход по нажатию Enter
entry.bind('<Return>', lambda e: callback())
# Выход по клику кнопки
ok = tk.Button(root, text=u'Ввести и выйти',command=callback)
ok.pack()
# Выход по нажатию Enter и Пробел на кнопке (навигация по Shift+Tab)
ok.bind('<Return>', lambda e:callback())
entry.focus_set()
root.mainloop()
return res[0]
Что, зараза, характерно, следующий код позволяет вставить текст из буфера, хотя он практически идентичен первому.
# Текстовое поле в одну строку
def text_field_small(title):
root, res = tk.Tk(), [None]
def callback(): res[0] = entry.get(); root.destroy()
root.title(title)
entry = tk.Entry(root,font="12")
entry.pack()
# Выход по нажатию Enter
entry.bind('<Return>', lambda e: callback())
# Выход по клику кнопки
ok = tk.Button(root, text=u'Ввести и выйти', command=callback)
ok.pack()
# Выход по нажатию Enter и Пробел на кнопке
ok.bind('<Return>', lambda e:callback())
entry.focus_set()
root.mainloop()
return res[0]