Kopieren, Einfügen; Leertaste durch Button blockiert

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Pygoscelis papua
User
Beiträge: 206
Registriert: Freitag 13. März 2015, 18:36

Ich bin gerade Dabei ein eigenes Text-Editor Widget zu erstellen, weil mir das buildin nicht ausreicht für spezielle Dinge.
Ich kann schon ganz normal Schreiben und so mein Problem ist jetzt:
1. wie ich etwas einfügen kann
2. und außerdem wie ich verhindere, das mir PushButtons etc. die Leertaste blockieren

Die Tasten fange ich im MainWidget mit

Code: Alles auswählen

def keyPressEvent(self, e):
        self.wid.keyPress(e.key(), e.text())
ab wobei self.wid mein selbsterstelltes widget ist.

Ich kann gerne noch weitere Codeteile senden, wenn jemand diese gebrauchen kann, um die Frage zu beantworten.
import this
hidden python features

JAVA = Just Another Vulnerability Announcement :D
Benutzeravatar
Madmartigan
User
Beiträge: 200
Registriert: Donnerstag 18. Juli 2013, 07:59
Wohnort: Berlin

Dazu ein paar Fragen:

Welche Funktionalität von QLineEdit, QPlainTextEdit oder QTextEdit fehlt dir denn?

Warum implementierst du die Key Events in der MainForm und nicht im Widget selber? Wenn das Widget nicht fokussiert ist, sollte es auch nicht auf Input-Events reagieren.

Statt ein komplett eigenes Widget zu bauen, wäre es nicht eher empfehlenswert von QLineEdit, QPlainTextEdit oder QTextEdit zu erben und dein gewünschtes Feature einfach hinzuzufügen? Denn Cut/Copy/Paste sind bereits implementiert bei den Basis Klassen.
Pygoscelis papua
User
Beiträge: 206
Registriert: Freitag 13. März 2015, 18:36

Madmartigan hat geschrieben: Welche Funktionalität von QLineEdit, QPlainTextEdit oder QTextEdit fehlt dir denn?
Z.B. Das man Zeilen ausblenden kann, dass Zeilenzahlen angezeigt werden etc.

Wie schaffe ich es denn, dass mein Widget fokusiert wird?

Das mit dem Kopieren habe ich erstmal mit pyperclip gelöst, wenn jemand etwas besseres weiß, bitte sagen.
import this
hidden python features

JAVA = Just Another Vulnerability Announcement :D
Pygoscelis papua
User
Beiträge: 206
Registriert: Freitag 13. März 2015, 18:36

Für das fokusieren habe ich jetzt die setFokus() funktion verwendet, und dafür gesorgt, dass oft der Fokus auf mein Widget gestellt wird.
Ich glaube aber, dass das nicht so sinvoll ist bzw. nicht stilvoll.
Wenn jemand eine Bessere Idee hat, würde ich mich freuen wenn er mir diese sagt.
import this
hidden python features

JAVA = Just Another Vulnerability Announcement :D
Pygoscelis papua
User
Beiträge: 206
Registriert: Freitag 13. März 2015, 18:36

Also das mit dem fokusieren habe ich jetzt behoben indem ich einfach dann fukusiere, wennauf das Widget geclickt wird. (hätte mir auch früher einfallen können)

für das kopieren habe ich jetzt das QClipboard gefunden aber ich verstehe nicht wie es zu handhaben ist.
Kann mir da jemand helfen?
import this
hidden python features

JAVA = Just Another Vulnerability Announcement :D
BlackJack

@Pygoscelis papua: Wo liegt denn das konkrete Problem? Du holst Dir vom `QApplication`-Typ über die statische Methode `clipboard()` das `QClipboard`-Objekt und von dem dann mit der `text()`-Methode den Text.
Pygoscelis papua
User
Beiträge: 206
Registriert: Freitag 13. März 2015, 18:36

Ok Danke ich hatte irgendein Problem, weshalb das nicht funktioniert hat, jetzt geht das aber.
import this
hidden python features

JAVA = Just Another Vulnerability Announcement :D
Benutzeravatar
Madmartigan
User
Beiträge: 200
Registriert: Donnerstag 18. Juli 2013, 07:59
Wohnort: Berlin

Pygoscelis papua hat geschrieben:[...] dass oft der Fokus auf mein Widget gestellt wird.
Ich glaube aber, dass das nicht so sinvoll[...]
Die Erkenntnis ist korrekt. :wink:

Der Fokus ist nichts, was programmatisch dann und wann geändert respektive einem anderen Widget zugewiesen werden sollte. Für gewisse Fälle macht das Sinn, aber in deinem Kontext wäre das nicht praktikabel, schon gar nicht oft.

Ich will nur noch mal darauf hinweisen, dass du meiner Einschätzung nach den steinigsten Weg gehst. Für Zeilennummern und Code-Folding brauchst du kein eigenes Widget von quasi komplett Null zu bauen. Das Nächstliegende ist hier tatsächlich, von QTextEdit zu erben und das Widget um die beiden Features zu erweitern.

Es scheint als möchtest du deinen eigenen (Code-)Editor bauen, da wärst du nicht der Erste. ;-)
Schau einfach mal im Netz, es gibt bereits Beispiele und Lösungen für dein Vorhaben, sogar mit Syntax-Highlighting etc.

~Mad
Pygoscelis papua
User
Beiträge: 206
Registriert: Freitag 13. März 2015, 18:36

Ich weiß nicht was ich falsch mache, aber ich finde weder einen selbsgebauten Editor, also mit Python noch eine vernünftige anleitung zum erweitern
von einem Widget. Kann mir da jemand helfen?
import this
hidden python features

JAVA = Just Another Vulnerability Announcement :D
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@Pygoscelis papua:
Beispiel eines Rich Text Editors: http://doc.qt.io/qt-5/qtwidgets-richtex ... ample.html
Antworten