在pyqt5中制作自定义右键上下文菜单

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

在 pyqt5 中,我可以使用 QMenu 创建右键单击上下文菜单,但这对我来说太标准了。我使用 qt-designer 创建了一个漂亮的小部件,并希望将其用作特定作品的上下文菜单。现在我使用许多 eventfilter 和 mousepressevents 来处理它,但我认为这不是正确的方法。是否可以使用 pyqt5 中的集成功能来使自定义上下文菜单起作用?

python pyqt pyqt5 qt-designer
1个回答
0
投票

上下文菜单类似于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_()
© www.soinside.com 2019 - 2024. All rights reserved.