QT6 - eigenes Kontext Menu erstellen
Moin!
Ich möchte unter Python mit Qt6 ein QPlainTextEdit mit eigenem QMenu erstellen, dessen angebotenen QActions von den geklickten Begriffen abhängen. Die Begriffe im Text werden durch Kommas getrennt.
Nehmen wir an, der Text lautet "spam ham eggs, spam bacon eggs, spam beans eggs".
Nach einem Klick auf "spam", wie kann ich feststellen ob "spam ham eggs", "spam bacon eggs" oder spam beans eggs" geklickt wurde?
QTextCursor.SelectionType.WordUnderCursor gibt das geklickte Word "spam" zurück.
QTextCursor.SelectionType.BlockUnderCursor) gibt den ganzen Satz "spam ham eggs, spam bacon eggs, spam beans eggs".
Die einzige Möglichkeit, die ich i.M. sehe, ist den Text an der Kommas umzubrechen, also
"spam ham eggs,
spam bacon eggs,
spam beans eggs"
anzeigen zu lassen und QTextCursor.SelectionType.LineUnderCursor zu nutzen, welches die geklickte Zeile und damit den Begriff zurück gibt. Leider verbraucht so ein Layout zu viel Platz und stört den Lesefluss erheblich. Hat jemand eine bessere Idee?
Danke fürs Lesen, Frau Klein
PS. Jetzt bekomme ich Bock auf englisches Frühstück
Ich möchte unter Python mit Qt6 ein QPlainTextEdit mit eigenem QMenu erstellen, dessen angebotenen QActions von den geklickten Begriffen abhängen. Die Begriffe im Text werden durch Kommas getrennt.
Nehmen wir an, der Text lautet "spam ham eggs, spam bacon eggs, spam beans eggs".
Nach einem Klick auf "spam", wie kann ich feststellen ob "spam ham eggs", "spam bacon eggs" oder spam beans eggs" geklickt wurde?
QTextCursor.SelectionType.WordUnderCursor gibt das geklickte Word "spam" zurück.
QTextCursor.SelectionType.BlockUnderCursor) gibt den ganzen Satz "spam ham eggs, spam bacon eggs, spam beans eggs".
Die einzige Möglichkeit, die ich i.M. sehe, ist den Text an der Kommas umzubrechen, also
"spam ham eggs,
spam bacon eggs,
spam beans eggs"
anzeigen zu lassen und QTextCursor.SelectionType.LineUnderCursor zu nutzen, welches die geklickte Zeile und damit den Begriff zurück gibt. Leider verbraucht so ein Layout zu viel Platz und stört den Lesefluss erheblich. Hat jemand eine bessere Idee?
Danke fürs Lesen, Frau Klein
PS. Jetzt bekomme ich Bock auf englisches Frühstück
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 91341041406
Url: https://administrator.de/contentid/91341041406
Ausgedruckt am: 21.11.2024 um 19:11 Uhr
3 Kommentare
Neuester Kommentar
Moin,
/offtopic
Du hast einige Varianten ausgelassen
lks
PS: Du könntest Shift-Space (=ALT-160 = geschütztes Leerzeichen) zwischen den Worten probieren.
/offtopic
Du hast einige Varianten ausgelassen
lks
PS: Du könntest Shift-Space (=ALT-160 = geschütztes Leerzeichen) zwischen den Worten probieren.
Hole dir die Position des Cursors als Integer, suche von der Position aus das vorherige Komma und das nachfolgende Komma oder Ende des Textes und extrahiere den Text aus den ermittelten Indizes der Kommas.
Oder du erstellst aus dem Text ein Array gesplittet an den Kommas und ermittelst den Arrayeintrag anhand der Integer-Position des Cursors (abzüglich aller Kommas natürlich) und der addierten Länge der einzelnen Einträge.
https://tio.run/##XY1BDsIgEEX3nGLCCiI2VhMXTXoS4wKBtsQWCMyinh5JbbVx9yd570 ...
Ergebnis
Gruß
Oder du erstellst aus dem Text ein Array gesplittet an den Kommas und ermittelst den Arrayeintrag anhand der Integer-Position des Cursors (abzüglich aller Kommas natürlich) und der addierten Länge der einzelnen Einträge.
https://tio.run/##XY1BDsIgEEX3nGLCCiI2VhMXTXoS4wKBtsQWCMyinh5JbbVx9yd570 ...
# text
txt = "spam ham, spam ham eggs, spam ham egs bacon"
# position an der der Cursor steht (hier nur als Beispiel definiert)
clickedpos = 12
# Startposition des Strings ermitteln
start = txt.rfind(",",0,clickedpos) + 1
# Endposition ermitteln
end = txt.find(",",clickedpos)
# falls am Ende kein Komma gefunden wird Ende des Textes definieren
if end == -1 : end = len(txt)
# Text aus Indizes extrahieren ohne Whitespace an Anfang/Ende
clickedtext = txt[start:end].strip()
# und auageben
print(clickedtext)
spam ham eggs
Gruß