+
36
-

回答

可以

import webview
from webview.dom import DOMEventHandler

def on_drop(e):
    """drop 事件回调,e 是字典"""
    files = e['dataTransfer']['files']
    if not files:
        return

    for f in files:
        abs_path = f.get('pywebviewFullPath')   # 关键:真实路径
        print('[收到拖放]', abs_path)

        # 如果还想把路径发回 Python 业务层
        # window.evaluate_js(f'pywebview.api.deal_with_path("{abs_path}")')

def bind_dom(window):
    """把事件挂到 document 上,也可挂到任意元素"""
    doc = window.dom.document
    doc.events.drop += DOMEventHandler(on_drop, prevent_default=True, stop_propagation=True)
    # 记得阻止默认行为,否则浏览器会直接用页面打开文件
    doc.events.dragover += DOMEventHandler(lambda _: None, prevent_default=True)

if __name__ == '__main__':
    window = webview.create_window(
        'pywebview 6.0 拖放取路径',
        html='''
            <body style="height:100vh;display:flex;align-items:center;justify-content:center;">
                <h1>把文件拖进来(任意位置)</h1>
            </body>
        '''
    )
    webview.start(bind_dom, window, debug=True)

网友回复

我知道答案,我要回答