framelesswindowhint导致qmenu无法正常工作
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了framelesswindowhint导致qmenu无法正常工作相关的知识,希望对你有一定的参考价值。
我是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_())
答案
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_())
以上是关于framelesswindowhint导致qmenu无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章
如何将 iOS 应用 IPA 交付给客户以使用他们自己的企业配置文件进行签名
amazon redshift 并发写入导致插入记录,导致重复