Собственно нужно, чтобы отображался автоматически генерируемый в процессе исполнения программы текст, который можно копировать, но нельзя изменять. Задача усложняется за счёт того, что требуется обойтись стандартной поставкой Python.
Виджет Text не подходит, так как не из переменной берёт текст.
Виджет Entry не подходит, так как однострочный.
Виджет Label не выделяется.
На всякий случай: язык - python, модуль - Tkinter.
Какой выбрать виджет из Tkinter (python), чтобы показывал многострочный текст из переменной и выделялся (Желательно, чтобы редактировать с GUI было нельзя)
Модератор: Модераторы разделов
-
ddc
- Бывший модератор
- Сообщения: 3535
- Статус: OpenBSD-compatible
- ОС: OpenBSD -current
-
Liksys
- Сообщения: 2910
-
ddc
- Бывший модератор
- Сообщения: 3535
- Статус: OpenBSD-compatible
- ОС: OpenBSD -current
Re: Какой выбрать виджет из Tkinter (python), чтобы показывал многострочный текст из переменной и выделялся
Да, понятно, кто на этом форуме python'ом заведует... 
Да я собственно уже обсмотрел подобные ресурсы. Думал, может кто знает грамотный способ, который не знаю я?..
Пока приходит на ум только пара entry (одно из которых скрывается), и валидатор (который будет пропускать только изменения из кода). Но уж очень это криво и громоздко...
Да я собственно уже обсмотрел подобные ресурсы. Думал, может кто знает грамотный способ, который не знаю я?..
Пока приходит на ум только пара entry (одно из которых скрывается), и валидатор (который будет пропускать только изменения из кода). Но уж очень это криво и громоздко...
-
Liksys
- Сообщения: 2910
Re: Какой выбрать виджет из Tkinter (python), чтобы показывал многострочный текст из переменной и выделялся
Щас я сообржу, что можно сделать)))
-
Liksys
- Сообщения: 2910
Re: Какой выбрать виджет из Tkinter (python), чтобы показывал многострочный текст из переменной и выделялся
Как это?! o_O
Код: Выделить всё
import Tkinter
str = "Hello, Tkinter!"
tk = Tkinter.Tk()
text = Tkinter.Text(tk)
text.insert(Tkinter.END, str) # переменная
tk.mainloop()У Text по-моему есть параметр типа рид-онли. Устанавливается так: text.config(parameter=value)
У меня, кстати, в стандартную установку Tkinter не входит. Вместо него - PyQt3. Мануально доустановил PyQt4 (чего и порекомендовал бы для больших програм, ибо Tkinter - довольно слабенький).
-
ddc
- Бывший модератор
- Сообщения: 3535
- Статус: OpenBSD-compatible
- ОС: OpenBSD -current
Re: Какой выбрать виджет из Tkinter (python), чтобы показывал многострочный текст из переменной и выделялся
Код: Выделить всё
import Tkinter
str = "Hello, Tkinter!"
tk = Tkinter.Tk()
text = Tkinter.Text(tk)
text.insert(Tkinter.END, str) # переменная
tk.mainloop()Там не "рид-онли", а "state: enabled/disabled". В первом случае редактируется, во втором - не редактируется, но и на insert и delete не реагирует. Потому я Text и отмёл...
Во-первых:
ddc@ddclpc
$ tar tf /usr/portage/distfiles/Python-2.4.4.tar.bz2 | grep Tkinter
Python-2.4.4/Lib/lib-tk/Tkinter.pyХотя дальнейшие размышления на этот счёт показывают, что бессмысленно Tk-шную морду поддерживать.
А до PyKDE у меня руки пока не дошли...
-
Liksys
- Сообщения: 2910
Re: Какой выбрать виджет из Tkinter (python), чтобы показывал многострочный текст из переменной и выделялся
Это если из сырцов ставить. У меня например в Fedora-6 этот пакет есть на диске, но он не ставится (даже при полной установке), поскольку считается устаревшим.
Для такого использования кроме Text ничего нет. Единственное, что приходит на ум, создать класс, наследоваться от Text, например так (код весьма примерный, на Tkinter уже год не писал):
Еще раз говорю, штука весьма примерная, но, думаю, общий смысл ясен 
А вообще, если не секрет, расскажи суть задачи. Может, придумаем получше решение.
PyKDE - не стоит затачивать на KDE. Если хочешь действительно удобного инструментария и полной переносимости, то поставь PyQt4. И если программа опенсорсная, то никто не запрещает тебе таскать за собой инсталлятор Python, Qt4, PyQt4.
Для такого использования кроме Text ничего нет. Единственное, что приходит на ум, создать класс, наследоваться от Text, например так (код весьма примерный, на Tkinter уже год не писал):
Код: Выделить всё
class TextBrowser(Text) :
def __init__(self, parent=None) :
Text.__init__(self, parent) # вот тут не уверен, в Qt надо вызвать конструктор класса, а как в Tk - хз
self.config(state=disabled)
def setText(self, text) :
self.config(state=enabled)
self.delete() # укажи параметры, если есть
self.insert(END, text)
self.config(state=disabled)А вообще, если не секрет, расскажи суть задачи. Может, придумаем получше решение.
-
ddc
- Бывший модератор
- Сообщения: 3535
- Статус: OpenBSD-compatible
- ОС: OpenBSD -current
Re: Какой выбрать виджет из Tkinter (python), чтобы показывал многострочный текст из переменной и выделялся
Не секрет совершенно. Задолбало меня считать госпошлину и процент за пользование (это при подаче иска) на калькуляторе, вот я и написал себе на Python калькулятор госпошлины. Собственно, страница проект на SF.net и сайт проекта там же.
Программа получает данные: суд, цену иска и опционально дату исполнения обязательства - и считает цену иска и опционально опять же проценты. Соответственно, на выходе одна или две текстовых строки, пригодных к копированию в текстовый редактор. На wxPython всё оказалось проще: там есть соответствующие виджеты и всё отлично работает. А вот когда я попытался внести нужные изменения в версию на Tkinter (исторически первую), там не нашёл нужного виджета. Пока это всё писал, понял, что проблему высосал из пальца и обойдусь двумя виджетами Entry, один из каторых будет включаться, если проценты считаются.
Ну, PyKDE - это для специальной версии только для KDE - для всего остального есть wxPython.