Использовать выбранный путь к файлу проводника или папке в качестве переменной в скрипте Python для контекстного меню - PullRequest
2 голосов
/ 23 июля 2011

Я пишу скрипт на python, который берет файл по одному или рекурсивно просматривает папки и перемещает их в новое место. Сценарий принимает один параметр (текущий путь к файлу). Я хочу использовать выбранный элемент в окне проводника в качестве переменной.

Я создаю контекстное меню через файлы regedit с надписью «Отправить на сервер». В настоящее время у меня есть соответствующие файлы regedit, созданные и указывающие на расположение команды python.exe "путь \ к \ python \ file.py

Короче говоря, я хочу, чтобы всплыло контекстное меню с надписью «Отправить на сервер», когда файл щелкается правой кнопкой мыши и при выполнении использует путь к выбранному файлу или папке в качестве единственной необходимой мне переменной. До сих пор я сталкивался с tkFileDialog (не совсем то, что я хочу) ctypes и модулями win32, но я не могу понять последние три модуля или они помогут или нет

Как примечание. Я создал скрипт Python, который делает эту вещь на Mac OSX. Намного проще с функцией macs 'services'.

1 Ответ

3 голосов
/ 23 июля 2011

Если вы добавите ярлык к этому сценарию (написанный для Python 3) в пользовательскую папку «SendTo» (%USERPROFILE%\SendTo), при нажатии правой кнопки мыши появится диалоговое окно каталога. Меню «Отправить». Диалог работает и для сетевых расположений. Когда скрипт запускается, полный путь к выбранному файлу / папке находится в sys.argv[1]. В настоящее время он просто показывает выбранный путь назначения в окне сообщения. Вы можете изменить расширение на pyw, если вам не нужна консоль.

import os, sys
from tkinter import Tk, filedialog
from tkinter.messagebox import showinfo

class Dialog:

    def __init__(self, path):
        self.path = path
        self.dst_path = ''
        self.root = root = Tk()

        root.iconify()
        root.after_idle(self.askdirectory)
        root.mainloop()

    def askdirectory(self):
        self.dst_path = filedialog.askdirectory(initialdir=self.path)
        showinfo('Selected Path', self.dst_path)
        self.root.destroy()

if __name__ == '__main__':
    if len(sys.argv) > 1:
        path = sys.argv[1]
        if os.path.isfile(path):
            path = os.path.dirname(path)

        dialog = Dialog(path)

        #if dialog.dst_path: do_something(dialog.dst_path)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...