Hello John
I really think, the documentation of PySide is wrong here, the examples
are not even valid python syntax...
First of all, I can not find a reason why not to use the convenient
python functions print and raw_input() to read/write to the console. I
would use this one or sys.stdin/ sys.stdout as usual in python apps
without PySide. Using QTextStream might be a good idea in C++, but in
python I can not see any advantage. I found the solution to use
QTextStream with PySide and wrote a little application that lets you
easily compare both variants (see code below). Run the script from the
console and then you can read/write to this console after using the
pushbuttons in the widget. You will see soon the disadvantages of using
QTextStream for reading: you have to terminate your input by pressing
ENTER and then CTRL-D instead of just pressing ENTER and the widget
freezes after a few seconds, but will get back if you terminate your
input. This disadvantages do not appear if you simply use pythons
raw_input()...
I hope this helps you to get started!
Cheers, Aaron
Code:
############################
from PySide.QtGui import *
from PySide.QtCore import *
class Widget(QWidget):
def __init__(self, parent=None):
super(Widget, self).__init__(parent)
self.setupUi()
self.setupButtonSlots()
self.setupStreams()
def setupUi(self):
self.setLayout(QVBoxLayout())
self.pbReadPython = QPushButton("Read console input (using
python's raw_input())", self)
self.labelReadPython = QLabel('Your console input will be shown
here: ', self)
self.pbReadQt = QPushButton("Read console input (using
QTextstream)", self)
self.labelReadQt = QLabel('Your console input will be shown
here: ', self)
self.pbWritePython = QPushButton("Write to console (using
python's print)", self)
self.pbWriteQt = QPushButton("Write to console (using
QTextstream)", self)
self.layout().addWidget(self.pbReadPython)
self.layout().addWidget(self.labelReadPython)
self.layout().addWidget(self.pbReadQt)
self.layout().addWidget(self.labelReadQt)
self.layout().addWidget(self.pbWritePython)
self.layout().addWidget(self.pbWriteQt)
def setupButtonSlots(self):
self.pbReadPython.clicked.connect(self.readPython)
self.pbReadQt.clicked.connect(self.readQt)
self.pbWritePython.clicked.connect(self.writePython)
self.pbWriteQt.clicked.connect(self.writeQt)
def setupStreams(self):
self.stdin = QFile()
self.stdin.open(0,
QIODevice.OpenMode(QIODevice.OpenModeFlag.ReadOnly))
self.stdout = QFile()
self.stdout.open(1,
QIODevice.OpenMode(QIODevice.OpenModeFlag.WriteOnly))
self.inStream = QTextStream(self.stdin)
self.outStream = QTextStream(self.stdout)
def readPython(self):
txt = raw_input('Write something and press ENTER: ')
print 'Thanks, your input is shown in the widget.'
self.labelReadPython.setText('Your input was: %s' % txt)
def readQt(self):
print "Write something and press ENTER and then CTRL-D to start
reading: "
txt = self.inStream.readLine()
print "Thanks, your input is shown in the widget."
self.labelReadQt.setText('Your input was: %s' % txt)
def writePython(self):
print "This is some test text written to console using python's
print."
def writeQt(self):
self.outStream << "This is some test text written to console
using QTextstream."
self.outStream << 10 # new line
self.outStream.flush()
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())
Am 21.07.2012 05:02, schrieb John Tourtellott:
The QTextStream documentation states that it is common to use
PySide.QtCore.QTextStream to read console input, however, I get a
python error when I try the example in the documentation:
stream = QTextStream(sys.stdin.fileno())
I'll paste the full error message below, but basically QTextStream has
no constructor that takes in an integer (which the file descriptor
is). How do you use QTextStream to read console input?
Python error message:
TypeError: 'PySide.QtCore.QTextStream' called with wrong argument
types:
PySide.QtCore.QTextStream(int)
Supported signatures:
PySide.QtCore.QTextStream()
PySide.QtCore.QTextStream(PySide.QtCore.QByteArray,
PySide.QtCore.QIODevice.OpenMode = QIODevice.ReadWrite)
PySide.QtCore.QTextStream(PySide.QtCore.QIODevice)
_______________________________________________
PySide mailing list
[email protected]
http://lists.qt-project.org/mailman/listinfo/pyside
_______________________________________________
PySide mailing list
[email protected]
http://lists.qt-project.org/mailman/listinfo/pyside