crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> PySide и QTextStream
Litkevich Yuriy
  опции профиля:
сообщение 29.5.2011, 11:52
Сообщение #1


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9666
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Что-то я не соображу как писать в поток (QTextStrem).
Операторов работы с потоком в Питоне вроде нет.
В официальной документации пример остался от Си++

???
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 29.5.2011, 13:06
Сообщение #2


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


У меня нет PySide (надо будет тоже скачать, посмотреть что получилось), поэтому проверить не могу. Но судя по документации все должно работать.
И в документации пример именно на python, приглядись к нему по внимательнее.
data = QFile("output.txt")
if data.open(QFile.WriteOnly | QFile.Truncate):
    out = QTextStream(&data)
    out << "Result: " << qSetFieldWidth(10) << left << 3.14 << 2.7
    # writes "Result: 3.14      2.7       "
Это питон в чистом виде. Все будет работать.
Потому что функции вида (смотри список методов в приведённой тобой ссылке)
def __lshift__ (s)
def __rshift__ (, arg__2)
это как раз и есть перегруженные операторы потоков (<< и >>)


Вот аналогичный тестовый пример на PyQt4, вполне рабочий
import PyQt4
str = PyQt4.QtCore.QString()
ts = PyQt4.QtCore.QTextStream(str)
ts << "qwertty"
print str
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 29.5.2011, 15:24
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9666
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(igor_bogomolov @ 29.5.2011, 16:06) *
перегруженные операторы потоков
я в бумажной книжке по питону смотрел, там эти операторы обозваны как операторы сдвига, да и на названия методов соответсвующие.

Вообще у меня они действительно работают.
        s  = QTextStream(outFile)
        for item in outputList:
            #print item
            s << item
            s << '\r\n'
Но походу это не правильное решение в PySide/PyQt, т.к. противоречит самому Питону.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 29.5.2011, 17:46
Сообщение #4


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Цитата(Litkevich Yuriy @ 29.5.2011, 16:24) *
Но походу это не правильное решение в PySide/PyQt, т.к. противоречит самому Питону.
Не вижу ни какого противоречия. В python так же как и в С++ есть перегрузка операторов. Просто синтаксически она выглядит несколько иначе.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 29.5.2011, 19:27
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9666
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(igor_bogomolov @ 29.5.2011, 20:46) *
Не вижу ни какого противоречия. В python так же как и в С++ есть перегрузка операторов.
перегрузка не означает, что можно делать так, чтобы оператор делал не свою работу.
Цитата(Litkevich Yuriy @ 29.5.2011, 18:24) *
def __lshift__ (s)
def __rshift__ (, arg__2
def __*сдвиг__ (...)
вот его смысл.

Т.е. плохо, когда логика оператора нарушается
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 25.2.2021, 8:00