Qt: OS-spezifische Icons verwenden

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Benutzeravatar
snafu
User
Beiträge: 5493
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Dienstag 24. März 2009, 18:24

Ich habe bisher in meinem kleinen Rohbau für eine Browser-Applikation für die trivialen Aktionen wie Back/Forward usw feste Icons, die ich mir mal irgendwo runtergeladen habe. Jetzt würde ich aber gerne zwecks Look&Feel die Icons des jeweiligen Betriebsystems/Oberfläche nutzen. Ich bin bereits auf QStyle.StandardPixmap gestoßen, wo ich mir auch ein paar passende Konstanten ausgeguckt habe. Das Problem: Ich werde aus den Beispielen auf der Seite leider nicht schlau. Wie also kann ich bspw `QStyle.SP_BrowserStop` auf mein Icon für `self.action_stop` anwenden?

browser.ui

browser.py
shcol (Repo | Doc | PyPi)
lunar

Dienstag 24. März 2009, 18:51

Wie wäre es mit Doku lesen?

Am Ende der Aufzählung wird auf die Methode QStyle.standardIcon() verlinkt, der du ein Element dieser Aufzählung übergibst, um ein QIcon-Objekt zurück zu erhalten, welches du an QAction.setIcon() übergeben kannst.

Wenn du dann noch die detaillierte Beschreibung von QStyle aufmerksam liest, findest du auch heraus, wie du an den aktuellen Stil der Anwendung oder eines speziellen Widgets kommst.
Benutzeravatar
snafu
User
Beiträge: 5493
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Dienstag 24. März 2009, 19:59

Dumm nur, dass ich die Doku gelesen habe und mit der Anwendung der Funktionen nicht klar kam (wie auch schon im ersten Beitrag angedeutet). Versuche ich nämlich, `standardIcon()` sowas zu übergeben, kommt:

Code: Alles auswählen

Traceback (most recent call last):
  File "./browser.py", line 64, in <module>
    window = MainWindow()
  File "./browser.py", line 18, in __init__
    self.set_icons()
  File "./browser.py", line 22, in set_icons
    home_icon = QtGui.QStyle.standardIcon(QtGui.QStyle.SP_DirHomeIcon)
TypeError: first argument of unbound method QStyle.standardIcon() must be a QStyle instance
Und der Versuch, zu instanzieren, ergibt erwartungsgemäß:

Code: Alles auswählen

Traceback (most recent call last):
  File "./browser.py", line 64, in <module>
    window = MainWindow()
  File "./browser.py", line 18, in __init__
    self.set_icons()
  File "./browser.py", line 22, in set_icons
    home_icon = QtGui.QStyle.standardIcon(QtGui.QStyle().SP_DirHomeIcon)
TypeError: PyQt4.QtGui.QStyle represents a C++ abstract class and cannot be instantiated
Wäre nett, wenn du mir auch in normalem Tonfall sagen könntest, was ich missverstehe. :)
shcol (Repo | Doc | PyPi)
Benutzeravatar
snafu
User
Beiträge: 5493
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Dienstag 24. März 2009, 20:09

Hab's jetzt. Denke mal, das meintest du auch mit dem letzten Hinweis. Danke.

Code: Alles auswählen

home_icon = self.style().standardIcon(QtGui.QStyle.SP_DirHomeIcon)
self.action_home.setIcon(home_icon)
Werde ich natürlich noch etwas umschreiben, da ich ja mehrere Symbole ändern will...
shcol (Repo | Doc | PyPi)
Antworten