Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: PySide и QTextStream
Форум на CrossPlatform.RU > Разработка > Интерпретируемые языки
Litkevich Yuriy
Что-то я не соображу как писать в поток (QTextStrem).
Операторов работы с потоком в Питоне вроде нет.
В официальной документации пример остался от Си++

???
igor_bogomolov
У меня нет 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
Цитата(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
Цитата(Litkevich Yuriy @ 29.5.2011, 16:24) *
Но походу это не правильное решение в PySide/PyQt, т.к. противоречит самому Питону.
Не вижу ни какого противоречия. В python так же как и в С++ есть перегрузка операторов. Просто синтаксически она выглядит несколько иначе.
Litkevich Yuriy
Цитата(igor_bogomolov @ 29.5.2011, 20:46) *
Не вижу ни какого противоречия. В python так же как и в С++ есть перегрузка операторов.
перегрузка не означает, что можно делать так, чтобы оператор делал не свою работу.
Цитата(Litkevich Yuriy @ 29.5.2011, 18:24) *
def __lshift__ (s)
def __rshift__ (, arg__2
def __*сдвиг__ (...)
вот его смысл.

Т.е. плохо, когда логика оператора нарушается
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2021 IPS, Inc.