Seite 2 von 2

Re: Textdatei in QTextEdit einlesen - Programm stürzt ab

Verfasst: Donnerstag 25. Juni 2020, 07:00
von PythonMarlem
Hallo,

zunächst mal als Antwort warum ich nicht das mache, was ihr schreibt:
Weil nach euren Theoretischen Vorschlägen mein Programm nicht mehr funktioniert!
Ich habe jetzt die Funktion als Testfunktion übernommen:

Code: Alles auswählen

        def menuoffnentest():
            dateiname, _ = QFileDialog.getOpenFileName(self, 'Datei öffnen', '', 'Textdateien (*.txt)')
            dateiname = os.path.abspath(dateiname[0])
            programmeinstellungen.pfadgeoeffnetedatei = dateiname
            with open(dateiname, encoding="utf8") as input:
                dateiinhalt = input.read()
            self.texteditor.setPlainText(dateininhalt)
            self.setWindowTitle(os.path.basename(dateiname) + " - Marlems PQTTexteditor")
            self.statusBar().showMessage(programmeinstellungen.pfadgeoeffnetedatei)
mit dem Ergebnis dass das komplette Programm abstürzt mit Fehlercode:
Process finished with exit code -1073740791 (0xC0000409)
Was jetzt?

Re: Textdatei in QTextEdit einlesen - Programm stürzt ab

Verfasst: Donnerstag 25. Juni 2020, 08:03
von __blackjack__
@PythonMarlem: Das sieht nach einem harten Absturz aus. Wenn man danach im Netz sucht gibt es einige Treffer die behaupten der Treiber für eine NVIDIA-Grafikkarte wäre schuld und es gibt wohl auch Leute die das gefixt haben.

Ansonsten kann da eine kaputte Installation, ein Bug in einer in C/C++ geschriebenen Erweiterung (Qt oder PyQt beispielsweise), oder die falsche Verwendung von Qt/PyQt die Ursache sein.

Drei Sachen sind hier offensichtlich auch abgesehen von dem Fehlercode falsch: a) Das nur der erste Buchstabe vom Dateinamen verwendet wird, b) das selbst das nicht funktioniert wenn der Benutzer den Dialog abbricht ohne eine Datei auszuwählen, und c) wird das natürlich immer noch nicht mit Texten funktionieren die nicht UTF-8 kodiert sind.

Re: Textdatei in QTextEdit einlesen - Programm stürzt ab

Verfasst: Donnerstag 25. Juni 2020, 09:06
von PythonMarlem
Auf Stackoverflow hat man mir geraten zur Fehleranalyse das Programm im Dosfenster auszuführen, weil man dort detaillierte Fehlermeldungen bekommt! Wenn ich das mache, bekomme ich folgendes:
QMainWindowLayout::addItem: Please use the public QMainWindow API instead
Traceback (most recent call last):
File "C:/Projekte/Python/PQT-Texteditor/PQTTexteditor.py", line 48, in menuoffnentest
with open(dateiname, encoding="utf8") as input:
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\Markus Lemcke\\C'
Also um Treiber und Grafikkarten geht es hier nicht.

Idee:
Fehlerbehandlung! Wie kann ich ein falsches encoding mit Fehlerbehandlung abfangen?

Re: Textdatei in QTextEdit einlesen - Programm stürzt ab

Verfasst: Donnerstag 25. Juni 2020, 09:12
von sparrow
Programm immer in der Kommandozeile ausführen. Wo hast du das denn vorher gemacht? Denn offensichtlich kam die Fehlermeldung gar nicht von deinem Programm.

Der Fehler, den du jetzt bekommst, ist ja recht eindeutig und hat nichts mit der Codierung zu tun. Die Datei, die du öffnen willst, gibt es schlicht nicht.

Und wenn du danach fragst, wie man Exceptions abfängt, sei dir das Python Tutorial ans Herz gelegt. Dort werden alle Grundlagen, auch die Fehlerbehandlung, gut erklärt.

Re: Textdatei in QTextEdit einlesen - Programm stürzt ab

Verfasst: Donnerstag 25. Juni 2020, 13:40
von PythonMarlem
Um das Encoding-Problem zu lösen, habe ich das hier versucht:

Code: Alles auswählen

 # Encoding Textdateien
        def encodingtextfiles(dateiname):
            encodings = ['utf8', 'windows-1250', 'windows-1252','ANSI']
            for e in encodings:
                try:
                    fh = codecs.open(dateiname, 'r', encoding=e)
                    fh.readlines()
                    fh.seek(0)
                except UnicodeDecodeError:
                    return ('fehler')
                else:
                    return (e)
                    break

Dann hier eingebaut:

Code: Alles auswählen

        def menuoffnenencoding():
            dateiname = QFileDialog.getOpenFileName(self, 'Datei öffnen', '', 'Textdateien (*.txt)')
            dateiname = os.path.abspath(dateiname[0])
            encodingtextf = encodingtextfiles(dateiname)
            if encodingtextf == 'fehler':
                dateininhalt = ''.join(open(dateiname, encoding='utf8').readlines())
            else:
                dateininhalt = ''.join(open(dateiname, encoding=encodingtextf).readlines())
            self.texteditor.setPlainText(dateininhalt)
            self.setWindowTitle(os.path.basename(dateiname) + " - Marlems PQTTexteditor")
Bei manchen Textdateien funktioniert.

Bei einer kommt diese Fehlermeldung:
QMainWindowLayout::addItem: Please use the public QMainWindow API instead
oder diese Fehlermeldung:

Code: Alles auswählen

QMainWindowLayout::addItem: Please use the public QMainWindow API instead
Traceback (most recent call last):
  File "C:/Projekte/Python/PQT-Texteditor/PQTTexteditor.py", line 51, in menuoffnenencoding
    dateininhalt = ''.join(open(dateiname, encoding='utf8').readlines())
  File "C:\ProgramData\Anaconda3\lib\codecs.py", line 322, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfc in position 467: invalid start byte
es ist noch immer nicht die gewünschte optimallösung

Re: Textdatei in QTextEdit einlesen - Programm stürzt ab

Verfasst: Donnerstag 25. Juni 2020, 14:00
von Sirius3
Dass etwas ohne Fehler dekodiert wird, bedeutet nicht, dass es richtig dekodiert wird. Hier wieder die unsinnige Benutzung von readlines, wo read passend wäre.
Dateien die man öffnet sollte man auch wieder schließen. Das seek ist auch überflüssig. Da sowohl im except-Fall als auch wenn es klappt die Funktion per `return` zurückkehrt, ist die for-Schleife überflüssig, der Rückgabewert im Fehlerfall aber nicht zu gebrauchen. Den behandelst Du auch falsch. Ein `break` nach einem `return` ist unsinnig.
Aber ich glaube, ich schreibe hier eh gegen eine Wand. Statt systematisch meine Lösungen durchzuarbeiten und die Fehler in Deiner Lösung zu suchen, rätst Du sowieso nur wild herum.

Re: Textdatei in QTextEdit einlesen - Programm stürzt ab

Verfasst: Donnerstag 25. Juni 2020, 14:19
von PythonMarlem
Also, ich melde mich jetzt in eurem forum ab, weil egal was man macht ihr schreibt nur Unsinn!
es ist ganz einfach so, Lösungscode bekommt man von euch nie, sondern nur Google-Anweisungen.
Wenn ich dann Lösungscode auf https://stackoverflow.com finde und den dann anpasse, ist euer kommentar:
Wir haben zwar nicht gewußt wie es geht, aber die auf stackoverflow machen alles falsch!

Leute ich habe jetzt keine Lust mehr.
Tschüß!

Re: Textdatei in QTextEdit einlesen - Programm stürzt ab

Verfasst: Donnerstag 25. Juni 2020, 15:07
von __blackjack__
Du hast eine komische Realitätswahrnehmung. Den Code von Sirius3 ignorierst Du konsequent und behauptest jetzt auch noch Du würdest hier nie Code bekommen.

Aber hey, Du bist ja anscheinend Software-Entwickler und hast schon barrierefreie Texteditoren in C# und Java implementiert und trotzdem sieht das hier mehr nach raten als nach programmieren aus. Nach zwei Texteditoren scheint das Thema Textkodierung auch komplett neu für Dich zu sein.