Hey Leute!
Ich möchte gerne ein Label wie einen Link wirken lassen, sodass halt beim Klicken ein neues Fenster geöffnet wird.
Geht das über QLabel und wenn ja wie? Ich hab von der Methode openExternalLink gelesen aber nicht so ganz verstanden ^^"
Danke!
Link erstellen?
".openExternalLinks" aktiviert lediglich einen Automatismus. Wenn diese Eigenschaft wahr ist, dann wird ein im Text des Labels enthaltener Link (v.a. a-Tags) bei Aktivierung automatisch der Browser geöffnet. Ist die Eigenschaft dagegen falsch, so sendet QLabel das Signal ".linkActivated()".
Wenn Du das QLabel selbst als Link wirken lassen möchtest, musst Du selbst Hand anlegen, von QLabel ableiten, und die entsprechenden Event-Methoden (z.B. mousePressEvent) überschreiben. Das ist allerdings ein äußerst umständlicher Weg.
Wesentlich einfacher ist es, den Text des Labels in einen a-Tag mit entsprechendem "href"-Attribut einzubetten. Anstatt also direkt ".setText()" aufzurufen, erzeugst Du erst einen Link aus dem Text und setzt diesen dann als Label-Text.
Das href-Attribut kann dabei beliebig gesetzt sein, es dient nur zur späteren Identifikation des Links. Anschließend verbindest Du Dich mit dem ".linkActivated"-Signal. Der Slot erhält dabei den Text des "href"-Attributs als Argument. Im Slot kannst Du dann tun, was immer ein Klick auf den Link bewirken soll:
Anhand des übergebenen "link" kannst Du dann zwischen mehreren Links und somit auch Labels unterscheiden. Damit das funktioniert, muss ".openExternalLinks" wie gesagt deaktiviert sein.
Wenn Du das QLabel selbst als Link wirken lassen möchtest, musst Du selbst Hand anlegen, von QLabel ableiten, und die entsprechenden Event-Methoden (z.B. mousePressEvent) überschreiben. Das ist allerdings ein äußerst umständlicher Weg.
Wesentlich einfacher ist es, den Text des Labels in einen a-Tag mit entsprechendem "href"-Attribut einzubetten. Anstatt also direkt ".setText()" aufzurufen, erzeugst Du erst einen Link aus dem Text und setzt diesen dann als Label-Text.
Code: Alles auswählen
text = 'foo'
link = '<a href="bar">{0}</a>'.format(xml.sax.saxutils.escape(text))
label.setText(link)
Code: Alles auswählen
label.linkActivated.connect(self.handle_link)
…
def handle_link(self, link):
print('The user clicked the link:', link)
".format()" ist seit Python 2.6 eine Methode der str- und der unicode-Klassen. Denn Sinn und die Funktionsweise der Funktion kannst Du in der Python-Dokumentation nachlesen.
Zum „Einbauen“ öffnest Du Deinen Editor und schreibst die gezeigten Zeilen an die richtigen Stellen. Sorry, aber was soll ich sonst auf diese Frage antworten? Ohne konkrete Probleme bzw. konkreten Quelltext kann ich nur mit Allgemeinplätzen antworten.
Wenn Du allerdings mit meiner Antwort echte Verständnisschwierigkeiten hast, dann solltest Du Dich wirklich noch mal ein paar Stunden mit der Qt-Dokumentation auseinandersetzen, und an Deinen Qt-Grundlagen arbeiten.
Zum „Einbauen“ öffnest Du Deinen Editor und schreibst die gezeigten Zeilen an die richtigen Stellen. Sorry, aber was soll ich sonst auf diese Frage antworten? Ohne konkrete Probleme bzw. konkreten Quelltext kann ich nur mit Allgemeinplätzen antworten.
Wenn Du allerdings mit meiner Antwort echte Verständnisschwierigkeiten hast, dann solltest Du Dich wirklich noch mal ein paar Stunden mit der Qt-Dokumentation auseinandersetzen, und an Deinen Qt-Grundlagen arbeiten.