Невозможно сделать фон Qmenu изогнутым

Я новичок в pyqt.

Я хочу получить меню с изогнутым фоном. Но не могу удалить черные края.

Похоже, что граница изогнута. Но я не могу удалить квадратный фон.

import sys
from PyQt5 import QtCore, QtWidgets, QtGui


class main(QtWidgets.QDialog):
    def __init__(self):
        super(main, self).__init__()
        layout = QtWidgets.QVBoxLayout()
        button = QtWidgets.QPushButton("menu", self)
        menu = QtWidgets.QMenu(button)

        menu.setWindowFlags(
            menu.windowFlags() | QtCore.Qt.FramelessWindowHint
        )
        menu.setWindowFlags(
            menu.windowFlags() | QtCore.Qt.NoDropShadowWindowHint
        )


        firstaction = QtWidgets.QAction("1st Item", self)
        secondaction = QtWidgets.QAction("2nd Item", self)
        thirdaction = QtWidgets.QAction("3rd Item", self)
        fourthaction = QtWidgets.QAction("4th Item", self)

        menu.addAction(firstaction)
        menu.addAction(secondaction)
        menu.addAction(thirdaction)
        menu.addAction(fourthaction)

        button.setMenu(menu)
        menu.setStyleSheet("""
        background-color:black;
        border-radius:20;
        border:1px solid white;"""
                           )

        self.setMinimumSize(500, 500)

        layout.addWidget(button)


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    mw = main()
    mw.show()
    sys.exit(app.exec())

это дает следующее окно: виджет моего меню


person Sayan Paul    schedule 18.02.2019    source источник


Ответы (1)


Настройте таблицу стилей (CSS) по своему усмотрению.

import sys
from PyQt5 import QtCore, QtWidgets, QtGui


class main(QtWidgets.QDialog):
    def __init__(self):
        super(main, self).__init__()
        layout = QtWidgets.QVBoxLayout()
        button = QtWidgets.QPushButton("menu", self)
        menu = QtWidgets.QMenu(button)
        menu.setWindowFlags(
            menu.windowFlags() | QtCore.Qt.FramelessWindowHint
        )
        menu.setWindowFlags(
            menu.windowFlags() | QtCore.Qt.NoDropShadowWindowHint
        )
        menu.setFont(QtGui.QFont("Arial", 10, QtGui.QFont.Bold))   # +++

        firstaction  = QtWidgets.QAction(" 1st Item", self)
        secondaction = QtWidgets.QAction(" 2nd Item", self)
        thirdaction  = QtWidgets.QAction(" 3rd Item", self)
        fourthaction = QtWidgets.QAction(" 4th Item", self)

        menu.addAction(firstaction)
        menu.addAction(secondaction)
        menu.addAction(thirdaction)
        menu.addAction(fourthaction)

        button.setMenu(menu)
#        menu.setStyleSheet("""
#        background-color:black;
#        border-radius:20;
#        border:1px solid white;"""
#                           )
        self.setMinimumSize(500, 500)
        layout.addWidget(button)


CSS = """
QWidget {
    background-color: white;  
}
QMenu {
    background-color: #ABABAB; 
    border: 2px solid red;          /* black */
    margin: 0;   
    padding: 5px;
    border-radius: 20px;
    background: white;       
}
QMenu::item {
    background-color: black; 
    color: white; 
    height: 20px;
    width: 60px;
    margin: 1px 0px 1px 0px;
    border: 1px transparent #2A2929;  
    border-radius: 7px;    
}
QMenu::item:selected { 
    background-color: green;  /* #654321; */
}
QMenu::separator {
    height: 12px;
    background: lightblue;
    margin-left: 10px;
    margin-right: 5px;
}
QPushButton {
    background-color: yellow;  
}
""" 

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    app.setStyleSheet(CSS)                    # +++
    mw = main()
    mw.show()
    sys.exit(app.exec())

введите здесь описание изображения

person S. Nick    schedule 18.02.2019