[pygtk] Вывод содержимого файла в gtk.TextView (снова pygtk)

Модератор: Модераторы разделов

Аватара пользователя
Sterh
Сообщения: 42
ОС: Arch Linux, Debian

[pygtk] Вывод содержимого файла в gtk.TextView

Сообщение Sterh »

Доброго времени суток. Возникла следующая проблема. Пытаюсь вывести содержимое текстового файла в gtk.TextView:

Код: Выделить всё

for line in open(dialog.get_filename()):
                self.textbuffer.set_text(line)


В textview выводится почему-то только последняя строчка. В то время как простым print line в терминал выводится весь файл
Изображение
Изображение
Мой скромный блог
Спасибо сказали:
Аватара пользователя
deadhead
Сообщения: 1913
Статус: zzz..z

Re: [pygtk] Вывод содержимого файла в gtk.TextView

Сообщение deadhead »

все правильно :-)

на каждой итерации объект line содержит строку. вызывая print вы печатаете содержимое объекта и... все... print не беспокоится о его содержимом, он свое дело сделал. в случае же с set_text вы ссылаетесь на изменяемый объект line... про ссылочную модель вы уже в курсе :-)

как же быть? например, так

Код: Выделить всё

self.textbuffer.set_text(open(dialog.get_filename()).readlines())
[x] close
Спасибо сказали:
Аватара пользователя
Sterh
Сообщения: 42
ОС: Arch Linux, Debian

Re: [pygtk] Вывод содержимого файла в gtk.TextView

Сообщение Sterh »

deadhead писал(а):
11.02.2010 16:58
все правильно :-)

на каждой итерации объект line содержит строку. вызывая print вы печатаете содержимое объекта и... все... print не беспокоится о его содержимом, он свое дело сделал. в случае же с set_text вы ссылаетесь на изменяемый объект line... про ссылочную модель вы уже в курсе :-)

как же быть? например, так

Код: Выделить всё

self.textbuffer.set_text(open(dialog.get_filename()).readlines())

Спасибо за ответ. Но, параметр не подходит:
TypeError: GtkTextBuffer.set_text() argument 1 must be string or readonly text buffer, not list
Изображение
Изображение
Мой скромный блог
Спасибо сказали:
Аватара пользователя
deadhead
Сообщения: 1913
Статус: zzz..z

Re: [pygtk] Вывод содержимого файла в gtk.TextView

Сообщение deadhead »

так может просто read()
[x] close
Спасибо сказали:
Аватара пользователя
Sterh
Сообщения: 42
ОС: Arch Linux, Debian

Re: [pygtk] Вывод содержимого файла в gtk.TextView

Сообщение Sterh »

Пробовал так:

Код: Выделить всё

       file =  open(dialog.get_filename())
            while file:
                line = a.readline()
                self.textbuffer.set_text(line)

Вобще приложение виснет намертво

deadhead писал(а):
11.02.2010 17:18
так может просто read()

к сожалению тот же результат
Изображение
Изображение
Мой скромный блог
Спасибо сказали:
Аватара пользователя
Sterh
Сообщения: 42
ОС: Arch Linux, Debian

Re: [pygtk] Вывод содержимого файла в gtk.TextView

Сообщение Sterh »

Все заработало!:

Код: Выделить всё

      for line in open(dialog.get_filename()):
                self.textbuffer.set_text(open(dialog.get_filename()).read())

deadhead спасибо за помощь!
Изображение
Изображение
Мой скромный блог
Спасибо сказали:
Аватара пользователя
deadhead
Сообщения: 1913
Статус: zzz..z

Re: [pygtk] Вывод содержимого файла в gtk.TextView

Сообщение deadhead »

а срезом пробовали?

Код: Выделить всё

for line in open(dialog.get_filename()):
                self.textbuffer.set_text(line[:])


P.S.
Sterh писал(а):
11.02.2010 17:40
Все заработало!:


какое-то странное у вас решение... вы открываете файл и затем... о боже... открываете его еще раз, и еще и еще... а работает такое решение лишь потому что объект файла разделяемый.
[x] close
Спасибо сказали:
Аватара пользователя
Sterh
Сообщения: 42
ОС: Arch Linux, Debian

Re: [pygtk] Вывод содержимого файла в gtk.TextView

Сообщение Sterh »

deadhead писал(а):
11.02.2010 17:42
а срезом пробовали?

Код: Выделить всё

for line in open(dialog.get_filename()):
                self.textbuffer.set_text(line[:])


P.S.
Sterh писал(а):
11.02.2010 17:40
Все заработало!:


какое-то странное у вас решение... вы открываете файл и затем... о боже... открываете его еще раз, и еще и еще... а работает такое решение лишь потому что объект файла разделяемый.

Вы правы что-то я нагородил. Решение

Код: Выделить всё

for line in open(dialog.get_filename()):
                self.textbuffer.set_text(line[:])

Не выводит ничего к сожалению. Пошел курить python core
Изображение
Изображение
Мой скромный блог
Спасибо сказали:
Аватара пользователя
deadhead
Сообщения: 1913
Статус: zzz..z

Re: [pygtk] Вывод содержимого файла в gtk.TextView

Сообщение deadhead »

Sterh писал(а):
11.02.2010 17:58
Не выводит ничего к сожалению.

Вы пример с read() без циклов пробовали?
Спрашиваю, потому что

Код: Выделить всё

>>>open(r'new file').read()
'line 3\nline 2\nline 1\n'

Содержимое файла new file

Код: Выделить всё

line 3
line 2
line 1
[x] close
Спасибо сказали:
Аватара пользователя
.Serj.
Сообщения: 127
ОС: Gentoo, Win7

Re: [pygtk] Вывод содержимого файла в gtk.TextView

Сообщение .Serj. »

Открываем pygtk reference, смотрим описания TextView, TextIter и TextBuffer.

Если коротко, сначала создаёте объект TextBuffer, затем создаёте TextIter с помощью gtk.TextBuffer.get_start_iter, затем TextView, предав созданный буфер в качестве параметра, и уж потом

Код: Выделить всё

for line in open(dialog.get_filename()):
    self.textbuffer.insert(self.iterator, line)
    self.textview.forward_display_line(self.iterator)


Я узнал это примерно за 5 мин. чтения документации, а вам слабо?
Спасибо сказали:
Аватара пользователя
Sterh
Сообщения: 42
ОС: Arch Linux, Debian

Re: [pygtk] Вывод содержимого файла в gtk.TextView

Сообщение Sterh »

deadhead писал(а):
11.02.2010 19:10
Sterh писал(а):
11.02.2010 17:58
Не выводит ничего к сожалению.

Вы пример с read() без циклов пробовали?
Спрашиваю, потому что

Код: Выделить всё

>>>open(r'new file').read()
'line 3\nline 2\nline 1\n'

Содержимое файла new file

Код: Выделить всё

line 3
line 2
line 1


Да сейчас попробовал:

Код: Выделить всё

self.textbuffer.set_text(open(dialog.get_filename()).read())

Работает! Спасибо всем!
Изображение
Изображение
Мой скромный блог
Спасибо сказали: