QTextEdit attribute error für setText

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
4bit
User
Beiträge: 113
Registriert: Dienstag 5. Mai 2009, 11:27

Hallo,

Ich probiere gerade ein Beispiel aus dem Zedcode Tutorium aus und stelle fest, daß das Programm bei mir nicht fehlerfrei läuft.
Das Programm soll einen FileOpenDialog aufrufen und den Inhalt der Datei in einem TextEdit anzeigen. Hier der Code:

Code: Alles auswählen

import sys
from PyQt4 import QtGui
from PyQt4 import QtCore

class MainWindow(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QMainWindow.__init__(self, parent)
        self.setGeometry(300,300,350,300)
        self.setWindowTitle("Openfile")
        self.textEdit = QtGui.QTextEdit()
        self.setCentralWidget(self.textEdit)
        self.statusBar()
        self.setFocus()

        action_open=QtGui.QAction(QtGui.QIcon('open.png'),"Open",self)
        action_open.setShortcut("Ctrl+O")
        action_open.setStatusTip("Open new File")
        self.connect(action_open,QtCore.SIGNAL("triggered()"),self.showDialog)

        menubar=self.menuBar()
        menu_file=menubar.addMenu("&File")
        menu_file.addAction(action_open)

    def showDialog(self):
        filename = QtGui.QFileDialog.getOpenFileName(self, "Open File", "")
        f = open(filename)
        data = f.read()
        print data
        self.textEdit.setText(data)
        f.close()

app=QtGui.QApplication(sys.argv)
win=MainWindow()
win.show()
app.exec_()
Beim Aufruf von Zeile 30 gibt es einen Attribut Error für setText. Auf dem Uni-Rechner an dem ich sitze sind 3 Versionen von Python, mindestens 2 Versionen von Pyqt und wahrscheinlich 2 Versionen von QT installiert (es gibt Verzeichnisse Qt3 und Qt4 in USR/LIB). Kann es sein, daß PyQt4 an meinem Rechner eine ältere Version von Qt angebunden hat und der Fehler so zustande kommt? Oder könnte der Fehler doch andere Gründe haben?

Grüße,
4bit
lunar

"QTextEdit.setText()" gibt es erst ab Qt 4.2, auf dem betreffenden System wird wohl nur Qt 4.0 oder Qt 4.1 installiert sein. Arbeite doch auf Deinem eigenen Rechner, dann musst Du Dich nicht mit veralteten Bibliotheken herumschlagen.

Du solltest immer das "parent"-Argument beim Konstruktor von Qt-Objekten benutzen! Also:

Code: Alles auswählen

self.textEdit = QtGui.QTextEdit(self)
Ferner solltest Du die Datei sicher öffnen und schließen ("with" oder "try … finally").

Ein Icon zum Öffnen bekommst Du ab Qt 4.1 auch über "self.style().standardIcon(QStyle.SP_DialogOpenButton)". Das ist dann das vom System verwendete Icon für diesen Zweck.

Und wozu soll "self.setFocus()" gut sein?
4bit
User
Beiträge: 113
Registriert: Dienstag 5. Mai 2009, 11:27

@lunar: parent Argument: mach ich auch jetzt. * import stammt noch aus einem alten Tutorium. datei handling: war bisher immer zu faul, danke für den Hinweis nochmal. Der Grund für das auftauchen von setFocus war mir auch beim Abschreiben des Codes (von einem Tutorium) nicht ganz klar.
Grüße,
4bit.
Antworten