Seite 1 von 1
String im Entry-Feld / merkwürdiges Problem
Verfasst: Sonntag 26. April 2020, 07:38
von Neu111
Hallo,
ich habe mir mit tkinter ein kleines Fenster mit zwei Button`s und einem Entry-Feld gebaut.
Ablauf:
--> User drückt 1. Button
--> Inhalt aus der Zwischenablage ("dasIstEinTest_stringZahlenBuchstaben123_TestZuEnde") wird eingelesen und durch einen regulären Ausdruck (findall) verarbeitet
--> Das Ergebnis ("stringZahlenBuchstaben123") wird in die Zwischenablage geschrieben und zusätzlich erfolgt eine Ausgabe im Entry-Feld
--> User drückt 2. Button
--> Wieder wird der Inhalt der Zwischenablage ausgelesen (jetzt: "stringZahlenBuchstaben123") und durch einen zweiten regulären Ausdruck verarbeitet.
Dieses Prozedere funktioniert.
ABER:
Kopiere ich den Inhalt aus dem Entry-Feld ("stringZahlenBuchstaben123") mit STRG+C in die Zwischenablage, und drücke den 2. Button, dann funktioniert plötzlich mein zweiter regulärer Ausdruck nicht mehr.
Wie ist das möglich?
In beiden Fällen sieht der Wert, der aus der Zwischenablage ausgelesen wird, exakt gleich aus: "stringZahlenBuchstaben123"
Liegt hier womöglich ein Zeichensatzproblem vor?
Ich bitte um Hilfe, danke.
Re: String im Entry-Feld / merkwürdiges Problem
Verfasst: Sonntag 26. April 2020, 09:20
von Sirius3
Das ließe sich ja leicht ermitteln, wenn Du Dir den Inhalt der Zwischenablage ausgeben lässt. Ansonsten kann man ohne Code nichts sagen.
Re: String im Entry-Feld / merkwürdiges Problem
Verfasst: Sonntag 26. April 2020, 19:57
von Neu111
Sirius3 hat geschrieben: Sonntag 26. April 2020, 09:20
Das ließe sich ja leicht ermitteln, wenn Du Dir den Inhalt der Zwischenablage ausgeben lässt.
Ok, ich wollte den Inhalt der Zwischenablage (als Modul nutze ich übrigens pyperclip) mit print() ausgeben.
Fehlermeldung:
"UnicodeEncodeError: 'utf-8' codec can't encode character '\uda40' in position 0: surrogates not allowed"
Nochmal zusammenfassend:
Kopiere ich einen String von einer externen Quelle (Browser, Notepad, ...) in die Zwischenablage, so kann mein Script/Tool den String verarbeiten.
Kopiere ich einen String in die Zwischenablage, der nicht von extern kam sondern innerhalb meines Scriptes/Tools kopiert wurde, so erscheint die oben genannte FM.
(Für mich unlogisch, warum pyperclip ausgerechnet ein Problem mit Strings hat, die NICHT aus einer externen Quelle kommen, sondern aus dem eigenen Tool heraus in die Zwischenablage kopiert wurden)
Ich denke, ich muss irgendwo noch einen Zeichensatz setzen. Ich weiß aber nicht wie.
Wer kann mir helfen?
Re: String im Entry-Feld / merkwürdiges Problem
Verfasst: Sonntag 26. April 2020, 20:16
von Sirius3
Dein scheint ja das schreiben in die Zwischenablage das Problem zu sein. Zeig doch den Code dafür.
Re: String im Entry-Feld / merkwürdiges Problem
Verfasst: Sonntag 26. April 2020, 20:45
von Neu111
Test: Ich lese die Zwischenablage aus und trage den Inhalt nur in das Entry-Feld "feld1" ein:
Code: Alles auswählen
inhalt_zwischenablage = pyperclip.paste()
self.feld1.insert(10, inhalt_zwischenablage)
Ergebnis: im Entry-Feld "feld1" werden nur Hyroglyphen (z.B. ᭖) ausgegeben.
Der Inhalt der Zwischenablage wurde vorher mit STRG + C aus einem anderen Entry-Feld ("feld2") kopiert.
Statt ein Entry-Feld könnte der String auch aus einem tk.Text-Feld stammen. Selbes Problem.
Wurde der String zum Beispiel aus Notepad in die Zwischenablage kopiert, tritt der Fehler NICHT auf.
Re: String im Entry-Feld / merkwürdiges Problem
Verfasst: Sonntag 26. April 2020, 21:12
von Neu111
Noch ein Versuch, der es in sich hat:
Ich markiere einen String aus dem Entry-Feld und drücke STRG + C
Anschließend drücke ich einen Button, der die Zwischenablage ausliest und eine regex-Prüfung vornimmt.
Ergebnis: Fehler wegen den Zeichensätzen
Und nun der zweite Test:
Ich markiere den String aus dem Entry-Feld und drücke STRG + C
Ich füge den String mit STRG + V in Notepad++ ein, markiere den String, und kopiere ihn mit STRG + C wieder in die Zwischenablage.
Anschließend drücke ich wieder den Button, der die Zwischenablage ausliest und eine regex-Prüfung vornimmt.
Jetzt funktioniert alles ohne Probleme ....
Re: String im Entry-Feld / merkwürdiges Problem
Verfasst: Montag 27. April 2020, 09:14
von Neu111
Sirius3 hat geschrieben: Sonntag 26. April 2020, 20:16
Zeig doch den Code dafür.
Hier ein Code zum testen:
Code: Alles auswählen
from tkinter import *
import pyperclip
def meineFunktion(wert):
import pyperclip
import re
aaa = pyperclip.paste()
if wert == 'zeile1':
e1.delete(0, END)
e1.insert(10, aaa)
elif wert == 'zeile2':
e2.delete(0, END)
e2.insert(10, aaa)
master = Tk()
e1 = Entry(master,width=60, bg='grey', font="Arial 12 bold")
e1.grid(row=0, column=0, columnspan=6)
e2 = Entry(master,width=60, bg='grey', font="Arial 12 bold")
e2.grid(row=1, column=0, columnspan=6)
Button(master, width=35, font="Verdana 10", text='Zwischenablage in Zeile 1 einfügen', command=lambda:meineFunktion('zeile1')).grid(row=10, column=0, sticky=W, padx=5)
Button(master, width=35, font="Verdana 10", text='Zwischenablage in Zeile 2 einfügen', command=lambda:meineFunktion('zeile2')).grid(row=10, column=1, sticky=W, padx=5)
master.mainloop()
Probiere bitte folgenden Ablauf:
1) Öffne Notepad++ und schreibe "Das ist ein Test" hinein.
2) Text markieren und mit STRG + C in die Zwischenablage kopieren.
3) Mein Tool starten, und den Button "Zwischenablage in Zeile 1 einfügen" drücken.
4) Der String "Das ist ein Test" ist nun im Tool im ersten Entry-Feld zu sehen.
5) String "Das ist ein Test"
im Tool (erstes Entry-Feld) markieren und mit STRG + C wieder in die Zwischenablage kopieren.
6) Den Button "Zwischenablage in Zeile 2 einfügen" drücken.
Ergebnis: im zweiten Entry-Feld erscheinen nur wirre Zeichen .....
Wie kann man dieses verflixte Problem lösen?
Re: String im Entry-Feld / merkwürdiges Problem
Verfasst: Montag 27. April 2020, 15:55
von Neu111
@Sirius3: hast du das Prozedere einmal nachgespielt? Tritt dieses Zeichensatzproblem bei dir auch auf?
Re: String im Entry-Feld / merkwürdiges Problem
Verfasst: Montag 27. April 2020, 16:43
von Sirius3
@Neu111: wenn Du irgendwo irgendeine Bibliothek gefunden hast, heißt das ja noch nicht, dass die auch fehlerfrei funktioniert.
Warum verwendest Du nicht die Clipboard-Funktionen von tkinter?
Ansonsten gilt noch alles gesagte aus den anderen Threads über Tkinter, was Du ja anscheinend ignorierst, so dass ich es hier nicht zu wiederholen braucht.
Code: Alles auswählen
import tkinter as tk
from functools import partial
def paste(entry):
aaa = entry.clipboard_get()
entry.delete(0, tk.END)
entry.insert(10, aaa)
def main():
master = tk.Tk()
e1 = tk.Entry(master,width=60, bg='grey', font="Arial 12 bold")
e1.grid(row=0, column=0, columnspan=6)
e2 = tk.Entry(master,width=60, bg='grey', font="Arial 12 bold")
e2.grid(row=1, column=0, columnspan=6)
tk.Button(master, width=35, font="Verdana 10", text='Zwischenablage in Zeile 1 einfügen', command=partial(paste, e1)).grid(row=10, column=0, sticky=tk.W, padx=5)
tk.Button(master, width=35, font="Verdana 10", text='Zwischenablage in Zeile 2 einfügen', command=partial(paste, e2)).grid(row=10, column=1, sticky=tk.W, padx=5)
master.mainloop()
if __name__ == '__main__':
main()
Re: String im Entry-Feld / merkwürdiges Problem
Verfasst: Montag 27. April 2020, 19:22
von Neu111
Sirius3 hat geschrieben: Montag 27. April 2020, 16:43
Warum verwendest Du nicht die Clipboard-Funktionen von tkinter?
Ich wusste nicht, dass tkinter bereits eine Clipboard-Funktion mitliefert. Umso schöner, wenn man auf ein extra Modul namens pyperclip verzichten kann.
Das habe ich jetzt auch sofort umgesetzt, und siehe da -
mein Zeichensatzproblem hat sich in Luft aufgelöst!
Nochmal ein ganz dickes Dankeschön, Sirius3!
Das Modul pyperclip hat anscheinend einen Bug.
Ansonsten habe ich deinen Rat natürlich befolgt, Sirius3, und habe meinen Code in eine Klassen-Gerüst umgebaut. Funktioniert wunderbar!
Der letzte Code war nur zum testen.