pyqt5-QListWidget's context menu

import sys

from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QMainWindow, QListWidget, QAction, QMenu


class MyWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):
        self.list_widget = QListWidget(self)
        self.list_widget.setGeometry(50, 50, 200, 100)
        initial_items = ["Item 1", "Item 2", "Item 3"]
        self.list_widget.addItems(initial_items)

        # 设置上下文菜单政策
        self.list_widget.setContextMenuPolicy(Qt.CustomContextMenu)
        # 绑定上下文菜单弹出的事件处理
        self.list_widget.customContextMenuRequested.connect(self.showContextMenu)

    # 展示上下文菜单
    def showContextMenu(self, pos):
        # 菜单设置
        self.context_menu = QMenu(self)
        delete_action = QAction("Delete", self)
        delete_action.triggered.connect(self.deleteSelectedItem)  # 菜单项的绑定方法
        self.context_menu.addAction(delete_action)

        # 显示菜单
        # 将列表控件上的局部坐标 pos 转换为全局坐标,确保菜单会在正确的位置显示
        self.context_menu.exec_(self.list_widget.mapToGlobal(pos))

    # 删除选中项
    def deleteSelectedItem(self):
        selected_item = self.list_widget.currentItem()
        if selected_item:
            self.list_widget.takeItem(self.list_widget.row(selected_item))


if __name__ == '__main__':
    from PyQt5.QtGui import QFont

    # 标准字体
    standard_font = QFont("Arial", 12)
    app = QApplication(sys.argv)
    window = MyWindow()
    window.setFont(standard_font)
    window.show()
    sys.exit(app.exec_())

Guess you like

Origin blog.csdn.net/m0_62653695/article/details/132345324