Problem mit PySide6 und QToolButton

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
HeinKurz
User
Beiträge: 16
Registriert: Montag 20. März 2023, 22:09

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)
...
Benutzeravatar
__blackjack__
User
Beiträge: 14210
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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)
“Every thinking person fears nuclear war and every technological nation plans for it. Everyone knows
it's madness, and every country has an excuse.” — Carl Sagan, Cosmos, Episode 13: Who Speaks for Earth?
Antworten