在 pyqt5 中,我可以使用 QMenu 创建右键单击上下文菜单,但这对我来说太标准了。我使用 qt-designer 创建了一个漂亮的小部件,并希望将其用作特定作品的上下文菜单。现在我使用许多 eventfilter 和 mousepressevents 来处理它,但我认为这不是正确的方法。是否可以使用 pyqt5 中的集成功能来使自定义上下文菜单起作用?
上下文菜单类似于qt中的菜单。它们包含 QAction。 您可以添加自定义 QAction,并在其中包装您自己的自定义小部件。
在下面的示例中,我们在菜单中获得一个文本编辑小部件。
from PySide2.QtWidgets import QApplication, QMainWindow, QMenu, QAction, QWidget, QLineEdit, QVBoxLayout, QWidgetAction
class CustomWidget(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
layout = QVBoxLayout()
self.search_bar = QLineEdit()
layout.addWidget(self.search_bar)
self.setLayout(layout)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
menu = self.menuBar()
file_menu = menu.addMenu('File')
# Create custom widget
custom_widget = CustomWidget()
# Create QWidgetAction and set custom widget
widget_action = QWidgetAction(self)
widget_action.setDefaultWidget(custom_widget)
# Add QWidgetAction to the menu
file_menu.addAction(widget_action)
self.setWindowTitle('Custom Widget in Menu')
self.setGeometry(100, 100, 400, 300)
if __name__ == '__main__':
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()