Problem mit setSelection() unter QT

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
ws
User
Beiträge: 65
Registriert: Freitag 16. Juni 2006, 13:19

Hallo,

ich habe ein Problem mit der setSelection()-Methode von QLineEdit im Zusammenhang mit Qt.

Ich habe, vereinfacht gesagt, ein Python-Widget mit QVBoxLayout, in das ich zwei QLineEdit-Instanzen packe. Ich möchte gerne einen Teil des Textes im zweiten QLineEdit selektieren, so dass er markiert dargestellt wird. Das scheint in diesem Fall aber nur für den obersten QLineEdit zu funktionieren; sobald ich versuche, etwas in dem zweiten QLineEdit zu selektieren, passiert gar nichts, d.h. der Text wird ganz normal dargestellt (s. Demo unten) Das ganze tritt auf sowohl unter Python2.5 mit Qt 4.3.1 als auch unter Python2.6 mit Qt 4.4.3 (WIN 7/64)

Kennt jemand dieses Problem und hat vielleicht einen Workaround?

Für jede Hilfe dankbar

Wolfgang


Code: Alles auswählen

from PyQt4 import QtGui

class SetSelectionTestDlg(QtGui.QDialog):

    def __init__(self, parent=None):
        QtGui.QDialog.__init__(self, parent)
        layout = QtGui.QVBoxLayout()
        topLineEdit = QtGui.QLineEdit("topLineEdit")
        bottomLineEdit = QtGui.QLineEdit("bottomLineEdit")
        layout.addWidget(topLineEdit)
        layout.addWidget(bottomLineEdit)
        self.setLayout(layout)

        # Das hier funktioniert, solange topLineEdit als
        # erstes über addWidget() zu layout hinzugefügt wird
        # topLineEdit.setSelection(0, 3)

        # Das hier funktioniert nicht, solange bottomLineEdit
        # nicht als erstes über addWidget() zu layout hinzugefügt wird
        bottomLineEdit.setSelection(0, 3)


if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    sstd = SetSelectionTestDlg()
    result = sstd.exec_()

Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Das ist ein ganz normales Verhalten. Markiert sein kann immer nur das Widget, welches den Focus hat. Kannst Du übrigens auch mal manuell ausprobieren in Deinem Beispiel! Wenn Du etwas in einem QLineEdit markierst, verschwindet die Markierung im anderen.

Ergänze mal Deinen (einkommentierten) Quelltext um das hier:

Code: Alles auswählen

        bottomLineEdit.setFocus()
Damit funzt es - unabhängig irgendwelcher Layout-Sachen; diese haben damit nichts zu tun.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
ws
User
Beiträge: 65
Registriert: Freitag 16. Juni 2006, 13:19

Hallo Hyperion,

vielen Dank, das hat geholfen. Wahrscheinlich bekommt immer das erste QLineEdit implizit den Fokus in dem Beispiel.

Auf jeden Fall nochmal vielen Dank

Wolfgang
Antworten