Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Интерпретируемые языки _ PySide и QTextStream

Автор: Litkevich Yuriy 29.5.2011, 11:52

Что-то я не соображу как писать в поток (QTextStrem).
Операторов работы с потоком в Питоне вроде нет.
http://www.pyside.org/docs/pyside/PySide/QtCore/QTextStream.html#detailed-description

???

Автор: igor_bogomolov 29.5.2011, 13:06

У меня нет 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

Цитата(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

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

Автор: Litkevich Yuriy 29.5.2011, 19:27

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

Т.е. плохо, когда логика оператора нарушается

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)