framelesswindowhint导致qmenu无法正常工作

问题描述 投票:1回答:1

我是pyqt的新手。我想摆脱qmenu阴影。但是当我添加framelesswindowhint时,菜单无法正常工作。

实现framelesswindowhint之前的代码:

import sys
from PyQt5 import QtWidgets, QtCore, QtGui


class MainWindow(QtWidgets.QWidget):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setMinimumSize(800, 400)
        self.setStyleSheet(
            """
        background-color:white;
        """
        )
        self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
        self.mainlayout = QtWidgets.QVBoxLayout()

        button = QtWidgets.QPushButton("my button")
        filemenu = QtWidgets.QMenu(button)
        #filemenu.setWindowFlags(QtCore.Qt.FramelessWindowHint)
        filemenu.setObjectName("filemenu")
        openaction = QtWidgets.QAction("open item", self)
        filemenu.addAction(openaction)
        button.setMenu(filemenu)
        self.mainlayout.addWidget(button)
        self.setLayout(self.mainlayout)


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    # app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5())
    mw = MainWindow()
    # mw.setWindowOpacity(0.95)
    mw.show()
    sys.exit(app.exec_())

输出:(点击按钮):enter image description here

取消注释后:(按钮未点击)enter image description here

(点击按钮)enter image description here

python qt user-interface pyqt
1个回答
0
投票

Qt.NoDropShadowWindowHint禁用支持平台上的窗口投影。

import sys
from PyQt5 import QtWidgets, QtCore, QtGui


class MainWindow(QtWidgets.QWidget):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setWindowFlags(QtCore.Qt.FramelessWindowHint)

        self.label = QtWidgets.QLabel(self, alignment=QtCore.Qt.AlignCenter)
        button = QtWidgets.QPushButton("my button")

        filemenu = QtWidgets.QMenu(button)
        filemenu.triggered.connect(self.selected)

        #filemenu.setWindowFlags(QtCore.Qt.FramelessWindowHint)         #  ---                  
        filemenu.setWindowFlags(filemenu.windowFlags()                  #  +++
                                | QtCore.Qt.NoDropShadowWindowHint)     #  +++

        openaction = QtWidgets.QAction("open item", self)
        filemenu.addAction(openaction)
        filemenu.addAction("Do something...") 

        button.setMenu(filemenu)

        self.mainlayout = QtWidgets.QVBoxLayout()
        self.mainlayout.addStretch()
        self.mainlayout.addWidget(self.label)
        self.mainlayout.addWidget(button)
        self.mainlayout.addStretch()
        self.setLayout(self.mainlayout)

    def selected(self, q):
        self.label.setText(q.text() + ' selected')


CSS = """
QWidget {
    background-color: white;  
}

QMenu {
    background-color: #ABABAB; /* sets background of the menu */
    border: 1px solid black;  
    margin: 0;   
}

QMenu::item {
    background-color: red; 
}

QMenu::item:selected { 
    background-color: #654321;
}

QMenu::separator {
    height: 12px;
    background: lightblue;
    margin-left: 10px;
    margin-right: 5px;
}

QLabel { 
color: red;
font: 27px;
} 

QPushButton {
    background-color: yellow;  
}
""" 

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    # app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5())
    app.setStyleSheet(CSS)
    mw = MainWindow()
    # mw.setWindowOpacity(0.95)
    mw.setMinimumSize(800, 400)
    mw.show()
    sys.exit(app.exec_())

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.