无法使 Qmenu 背景弯曲
Posted
技术标签:
【中文标题】无法使 Qmenu 背景弯曲【英文标题】:Cannot make Qmenu background curved 【发布时间】:2019-02-18 17:25:09 【问题描述】:我是 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())
这给出了以下窗口: my menu widget
【问题讨论】:
【参考方案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())
【讨论】:
以上是关于无法使 Qmenu 背景弯曲的主要内容,如果未能解决你的问题,请参考以下文章
子 QMenu 中的 QPushButton,悬停时更改背景