Seite 1 von 1

Problem mit PySide6 und QToolButton

Verfasst: Montag 27. Oktober 2025, 11:12
von HeinKurz
Ich hab eine App unter Windows mit PySide6 die soweit gut funktioniert bis auf ...:
Ich möchte in der Toolbar einen Button der ein kurzes Untermenü öffnet, wo man Optionen aktivieren/deaktivieren kann. Der Button wird angezeigt aber nicht das Untermenü. :cry:

Code: Alles auswählen

...
        MenuAnsicht = QMenu()
        self.MenuAFav = QAction("Favoriten")
        self.MenuAFav.setCheckable(True)
        self.MenuAFav.setChecked(True)
        MenuAnsicht.addAction(self.MenuAFav)
        self.MenuARoP = QAction("Receiver ohne Pay-TV")
        self.MenuARoP.setCheckable(True)
        MenuAnsicht.addAction(self.MenuARoP)
        self.MenuARmP = QAction("Receiver mit Pay-TV")
        self.MenuARmP.setCheckable(True)
        MenuAnsicht.addAction(self.MenuARmP)

        tbtnAnsicht = QToolButton()
        tbtnAnsicht.setFixedSize(50, 35)
        tbtnAnsicht.setToolTip("Ansicht")
        tbtnAnsicht.setIcon(QIcon(".\\icons\\iconAnsicht.png"))
        tbtnAnsicht.setPopupMode(QToolButton.ToolButtonPopupMode.MenuButtonPopup)
        tbtnAnsicht.setMenu(MenuAnsicht)

        toolbar.addWidget(tbtnAnsicht)
...

Re: Problem mit PySide6 und QToolButton

Verfasst: Montag 27. Oktober 2025, 12:43
von __blackjack__
@HeinKurz: Geundsätzlich sollte das so funktionieren. Was für eine Funktion hat denn der Button selbst? Und Du klickst auch auf den Teil mit dem Pfeil um das Menü zu öffnen‽

Anmerkungen zum Quelltext: Namenskonvention in Python ist klein_mit_unterstrichen. Selbst wenn man im GUI-Code die Konvention von Qt übernimmt, dann sind Namen die mit Grossbuchstaben anfangen für Klassen und nicht für andere Objekte.

Sofern man nicht Yoda heisst, sollten Namen in der richtigen Reihenfolge zusammengesetzt werden. Eine `menuAnsicht` ist etwas anderes als ein `ansichtMenu`. Der Code enthält von der Bedeutung her letzteres, benennt das also falsch.

Namen sollten keine kryptischen Abkürzungen enthalten. Bei `MenuAFav`, `MenuARoP`, und `MenuARmP` hat man als Leser am Ende mehr Fragen als die Namen erklären wofür sie stehen. `Menu` hat da auch nicht wirklich etwas zu suchen, denn `QAction`-Objekte können auch an ganz anderen Stellen verwendet werden.

Dem Button sollte keine feste Grösse in Pixeln gegeben werden. Die ergibt sich automatisch aus dem Inhalt.

Code: Alles auswählen

        view_menu = QMenu()
        self.favorites_action = QAction(
            "Favoriten", checkable=True, checked=True
        )
        view_menu.addAction(self.favorites_action)
        self.receiver_without_pay_tv_action = QAction(
            "Receiver ohne Pay-TV", checkable=True
        )
        view_menu.addAction(self.receiver_without_pay_tv_action)
        self.receicer_with_pay_tv_action = QAction(
            "Receiver mit Pay-TV", checkable=True
        )
        view_menu.addAction(self.receicer_with_pay_tv_action)

        view_toolbutton = QToolButton(
            toolTip="Ansicht",
            icon=QIcon("icons/ansicht.png"),
            popupMode=QToolButton.ToolButtonPopupMode.MenuButtonPopup,
        )
        view_toolbutton.setMenu(view_menu)

        toolbar.addWidget(view_toolbutton)