You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在PyQt中调用Windows上下文菜单?

调用Windows系统上下文菜单的实现方案

可以通过PyQt结合pywin32库调用Windows Shell API实现你需要的功能——弹出图中所示的原生Windows上下文菜单,以下是具体实现步骤:

1. 安装依赖

首先安装所需的Python库:

pip install pywin32 pyqt5

2. 代码实现示例

下面的示例在PyQt的列表控件中,右键点击文件/文件夹路径时,弹出对应的系统原生右键菜单:

import sys
import win32api
import win32gui
import win32shell
from PyQt5.QtWidgets import QApplication, QListWidget, QWidget, QVBoxLayout
from PyQt5.QtCore import Qt, QPoint

class FileListWidget(QListWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        # 添加示例文件/文件夹路径
        self.addItem("C:\\Windows\\notepad.exe")
        self.addItem("C:\\Users")

    def mousePressEvent(self, event):
        if event.button() == Qt.RightButton:
            item = self.itemAt(event.pos())
            if item:
                target_path = item.text()
                # 弹出系统上下文菜单
                self.show_system_context_menu(target_path, event.globalPos())
        super().mousePressEvent(event)

    def show_system_context_menu(self, target_path, global_pos):
        # 获取当前窗口句柄
        hwnd = win32gui.GetForegroundWindow()
        # 从路径生成Shell PIDL(标识符列表)
        pidl, _ = win32shell.SHILCreateFromPath(target_path)
        # 创建Shell文件夹视图对象
        shell_view = win32shell.SHCreateShellFolderView(hwnd, pidl)
        
        if shell_view:
            # 转换Qt坐标为Windows系统坐标格式
            win_pos = win32api.MAKELONG(global_pos.x(), global_pos.y())
            # 显示上下文菜单
            shell_view.ShowContextMenu(0, win_pos)

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        layout = QVBoxLayout()
        layout.addWidget(FileListWidget())
        self.setLayout(layout)
        self.setWindowTitle("调用Windows系统右键菜单")
        self.resize(400, 300)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

注意事项

  • 该方案仅适用于Windows系统,依赖Windows原生Shell API
  • 需保证pywin32版本与你的Python版本兼容,避免出现导入错误
  • 无论是文件还是文件夹路径,都能弹出对应的原生右键菜单

内容的提问来源于stack exchange,提问作者Larkov Aleksandr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 21:55:44