Customize QMenu display with QProxyStyle

Charles peacech at gmail.com
Mon Jun 9 06:22:57 BST 2025


Wrong QProxyStyle method. Tip: to know the right method, search for
menuitem in
https://codebrowser.dev/qt6/qtbase/src/widgets/styles/qcommonstyle.cpp.html

class Style(QProxyStyle):
    def drawControl(self, element, option, painter, widget):
        if element == QStyle.ControlElement.CE_MenuItem:
            super().drawItemText(painter, option.rect,
Qt.AlignmentFlag.AlignRight, option.palette, True, option.text,
QPalette.ColorRole.ButtonText)
        else:
            return super().drawControl(element, option, painter, widget)

On Mon, Jun 9, 2025 at 11:14 AM John Sturtz <john at sturtz.org> wrote:

> Hello again PyQt sages.  Hoping for some insight here -- despite a few
> hours' time fiddling with this, I don't seem to even be getting past square
> one.
>
> I'm trying to modify display of items in a QMenu using QProxyStyle.
> Basically, I've defined a class named Style that derives from QProxyStyle,
> and re-implements drawItemText() (which, just for starters, tries to
> right-justify the menu item text).
>
> I create a QMenu object, create an object of the Style class, and call
> .setStyle() to set it as the menu's style.
>
> It may or may not be the case that my drawItemText() implementation
> successfully right-justifies the text.  I'll never know, because it never
> gets called.  What (probably really basic thing) am I missing?
>
> Thanks!  [short sample code attached]
>
> /John
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://www.riverbankcomputing.com/pipermail/pyqt/attachments/20250609/388c97ac/attachment.htm>


More information about the PyQt mailing list