Link erstellen?

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Shaldy
User
Beiträge: 123
Registriert: Sonntag 2. März 2008, 22:49

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!
Dies ist keine Signatur!
lunar

".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.

Code: Alles auswählen

text = 'foo'
link = '<a href="bar">{0}</a>'.format(xml.sax.saxutils.escape(text))
label.setText(link)
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:

Code: Alles auswählen

label.linkActivated.connect(self.handle_link)
…

def handle_link(self, link):
    print('The user clicked the link:', link)
Anhand des übergebenen "link" kannst Du dann zwischen mehreren Links und somit auch Labels unterscheiden. Damit das funktioniert, muss ".openExternalLinks" wie gesagt deaktiviert sein.
Shaldy
User
Beiträge: 123
Registriert: Sonntag 2. März 2008, 22:49

Danke schonmal, aber ich glaube ich habe die Vorgehensweise noch nicht so ganz verstanden. ^^"
Was ist diese .format() Funktion hinter link?
Und wie baue ich das ganze jetzt genau ein?
Dies ist keine Signatur!
lunar

".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.
Shaldy
User
Beiträge: 123
Registriert: Sonntag 2. März 2008, 22:49

Schon gut danke, habs jetzt auch hinbekommen. Hatte beim ersten Mal nicht richtig gelesen und deswegen einige Verständnisschwierigkeiten bekommen ;)

Danke soweit ^^
Dies ist keine Signatur!
Antworten