Seite 1 von 1
Re: encode \n und \r asu einem QtLineEdit
Verfasst: Mittwoch 21. Februar 2024, 14:02
von Sirius3
Escaped werden nur Zeichen, die in Strings im Pythoncode schreibst. Wenn Du ein Lineedit hast dann ist ein \ ein Backslash-Zeichen. Wenn Du Zeilenumbrüche willst, dann benutze ein QTextEdit. Woher kommt die Anforderung, escapete Zeichen in eine GUI einzugeben?
Re: encode \n und \r asu einem QtLineEdit
Verfasst: Mittwoch 21. Februar 2024, 15:29
von __deets__
Was heißt “hat nicht geklappt”? Wie genau sieht der Output aus? Was sagt print(repr(der_text))?
Re: encode \n und \r asu einem QtLineEdit
Verfasst: Mittwoch 21. Februar 2024, 15:50
von Sirius3
Es ist schon klar, dass "\n" das Zeilenende anzeigt, aber es ist halt nicht üblich dass man das genau so in ein LineEdit eingibt. Wenn Du immer eine Zeile eingibst und immer am Ende des Textes ein "\r\n" haben möchtest, dann häng das einfach an:
Code: Alles auswählen
self.term_character = self.ui.LineEdit_TermCharacter.text().encode('utf-8') + b"\r\n"
Re: encode \n und \r asu einem QtLineEdit
Verfasst: Mittwoch 21. Februar 2024, 16:55
von __blackjack__
@bachatero18: Natürlich werden die escaped einegegeben. Wenn Du in ein `LineEdit` \ und dann n eingibst, dann ist sind das ja zwei Zeichen, als Zeichenkette "\\n" und nicht ein Zeichen mit dem Bytewert 10, als Zeichenkette "\n".
Re: encode \n und \r asu einem QtLineEdit
Verfasst: Donnerstag 22. Februar 2024, 12:26
von __deets__
Du hast das immer noch nicht verstanden: es gibt keine raw-Strings zum eingeben. raw-strings existieren AUSSSCHLIESSLICH im Code. Nicht in deinen QWidgets, und nicht in der Standardeingabe oder sonstewo. Wenn dein User \n eingibt, dann sind das ein Backslash, und ein n. So, wie das repr das ja auch ganz klar darstellt. \\r heisst "escapter \, also einfach ein \", und dann ein r.
Wenn du deinem User also damit die Moeglichkeit geben willst, whitespace einzugeben (statt einfach ein mehrzeiliges Textfeld anzubieten, das die Zeilenumbrueche natuerlich enthaelt), dann musst du *selbst* eine simple Ersetzung von "\\n".replace("\\n", "\n") vornehmen. Und mit anderen escape-Sequenzen genauso.
Re: encode \n und \r asu einem QtLineEdit
Verfasst: Donnerstag 22. Februar 2024, 13:28
von __deets__
bachatero18 hat geschrieben: Donnerstag 22. Februar 2024, 11:32
naja so bald ich mir den text ausprinte mit print(self.ui.LineEdit_TermCharacter.text())
bekomm ich \n also denk ich eher er wird als raw string gesetzt. Und effektiv gibt der User \n ein.
Also ich finde schon, dass du hier sagst, man gaebe einen raw-string ein.
Escaping gibt es nicht bei Texteingaben. Escaping gibt es genauso NUR im Code wie es auch NUR im Code raw-strings (die das escaping von wenigen Ausnahmen abgesehen ausschalten) gibt. Das Ergebnis von beiden String-Literal-Typen ist ein einfacher String (oder Byte-String, wenn b davor steht).
Der User, der ein \ eingibt, gibt ein \ ein. Und das war es. Da kann er danach ein n eingeben oder ein r oder ein t oder was auch immer, es hat *nicht* die Bedeutung, die
"\n"
in Code hat. Wenn du das willst, musst du es, wie schon gezeigt, EDIT ersetzen.
r"\n" im Code ist ebenfalls ein \, gefolgt von einem n. NICHT ein Neuezeilezeichen. Darum wird das auch im Interpreter mit \\n dargestellt, weil es ein Backslash gefolgt von einem n ist.
Re: encode \n und \r asu einem QtLineEdit
Verfasst: Donnerstag 22. Februar 2024, 14:23
von __deets__
Also fuer die 2-3 relevanten Faelle das von Hand zu machen finde ich jetzt nicht so dramatisch. Aber tatsaechlich habe ich mal geschaut & es gibt