Un moyen simple et intuitif d'ajouter vos scripts personnalisés à votre Windows cliquez avec le bouton droit de la direction.
Vous pouvez télécharger le fichier pywin_contextmenu.py à partir de ce référentiel (https://raw.githubusercontent.com/naveennamani/pywin_contextmenu/master/pywin_contextmenu.py) et placer le fichier dans votre dossier scripts.
Ou vous pouvez installer ce package à partir de PYPI en utilisant
pip install pywin-contextmenuet importez simplement dans vos scripts.
import pywin_contextmenu as pycm import pywin_contextmenu as pycm
# create a group
group1 = pycm . ContextMenuGroup ( "My python scripts" )
# convert your script into executable command
script_cmd = pycm . python_script_cmd ( "scripts/clean_empty_folders.py" , rel_path = True , hide_terminal = True )
# create the item
item1 = pycm . ContextMenuItem ( "Clean empty folders" , script_cmd )
# add item to the group
group1 . add_item ( item1 )
# or
group1 . add_items ([ item1 ])
# get root_key
rk = pycm . get_root ( pycm . UserType . CURR_USER , pycm . RootType . DIR_BG )
# Create the group and test
group1 . create ( rk )
########################
# In a more pythonic way
########################
pycm . ContextMenuGroup ( "Group 1" , items = [
pycm . ContextMenuItem ( "Open CMD" , "cmd.exe" ),
pycm . ContextMenuItem ( "Open CMD 2" , "cmd.exe" )
]). create (
pycm . get_root ( pycm . UserType . CURR_USER , pycm . RootTYpe . DIR_BG )
) import pywin_contextmenu as pycm
def test_function ( file_or_dir_name ):
print ( file_or_dir_name )
input ( "Press ENTER to continue" )
# create the nested groups to execute direct commands, python functions
# and python scripts
cmgroup = pycm . ContextMenuGroup ( "Group 1" , items = [
pycm . ContextMenuItem ( "Open cmd" , "cmd.exe" ),
pycm . PythonContextMenuItem ( "Test py" , test_function ),
pycm . ContextMenuGroup ( "Group 2" , items = [
pycm . PythonContextMenuItem ( "Python script test" , pycm . python_script_cmd (
"example.py" , rel_path = True , hide_terminal = True
))
])
])
# create the group for the current user to be shown on right click of
# directory, directory background and for python files
cmgroup . create_for ( pycm . UserType . CURR_USER , [
pycm . RootType . DIR ,
pycm . RootType . DIR_BG ,
pycm . RootType . FILE . format ( FILE_TYPE = ".py" )
]) Le script dépend de deux classes principales ContextMenuItem et ContextMenuGroup .
ContextMenuItemIl s'agit de l'élément de menu qui déclenche et lance la commande lorsqu'il est cliqué dans le contexteMenu. La signature de cette classe est
ContextMenuItem (
item_name , # name of the item to be shown
command , # command to be executed when selected
item_reg_key = "" , # registry key associated with the item
# (if not given will be treated as item_name)
icon = "" , # path to an icon to be shown with the item
extended = False # set to True if the item is to be shown when right clicked with shift button
) .create(root_key: HKEYType) - ajoute l'élément au registre du registre donné root_key . Obtenez la méthode root_key à l'aide get_root Utility.
.create_for(user_type: UserType, root_type: List[RootType]) - ajoute les éléments pour l'utilisateur donné et les emplacements racine donnés.
.delete(root_key: HKEYType) - Supprimez l'élément au root_key donné.
.delete_for(user_type: UserType, root_type: List[RootType]) - supprimez les éléments pour l'utilisateur donné et les emplacements racine.
.delete n'est pas préféré car tout root_key peut être passé. Au lieu de cela, veuillez utiliser .delete_for La méthode comme les clés de registre à supprimer sera supprimée automatiquement et en toute sécurité.PythonContextMenuItem Cette classe hérite de ContextMenuItem et convertit une fonction Python en une commande exécutable. Passez simplement la fonction Python comme un argument python_function .
PythonContextMenuItem (
item_name ,
python_function : Callable [[ str ], Any ], # callable python function which should take file/folder name as the single argument
item_reg_key = "" ,
icon = "" ,
extended = False
)ContextMenuGroupCette classe regroupe plusieurs éléments et sous-groupes.
ContextMenuGroup (
group_name , # name of the group to be shown
group_reg_key = "" , # registry key associated with the group
icon = "" , # path to an icon to be shown with the group
extended = False , # set to True if the group is to be shown when right clicked with shift button
items = [] # items to be displayed on this group
) Pour ajouter des éléments ou des groupes à une instance de groupe, appelez add_item / add_items de la classe.
ContextMenuGroup . add_item ( item )
# or
ContextMenuGroup . add_item ( subgroup )
# for multiple items
ContextMenuGroup . add_items ([ item1 , item2 , subgroup1 , subgroup2 ])ContextMenuGroup en passant les éléments à l'aide du mot clé items . Ensuite, pour créer le groupe et ajouter au contextMenu, appelez simplement .create Créez avec la clé obtenue à partir de get_root Fonction comme argument.
ContextMenuGroup.create(root_key) # Create the group and add to contextmenu
La classe a également la méthode .create , .create_for , .delete et .delete_for Méthodes qui sont les mêmes que celles des méthodes de ContextMenuItem .
ContextMenuItem et ContextMenuGroup self , afin qu'elles puissent être enchaînées. L'ajout d'éléments à ContextMenuGroup ne les ajoutera pas au contextMenu / Registry à moins que la méthode .create ne soit appelée. RootType - une Enum pour choisir où l'élément / groupe du menu contextuel sera affichéUserType - Une Enum pour choisir d'ajouter le menu contextuel pour l'utilisateur actuel ou pour tous les utilisateursget_root(user_type: UserType, root_type: RootType, file_type: str) - crée / ouvre la clé de registre pour user_type sélectionné et root_type. Si le root_type est RootType.FILE , l'argument file_type est requis et indique l'extension du fichier.python_script_cmd(script_path, rel_path = False, hide_terminal = False) - une fonction utilitaire pour convertir un script_path donné en une commande exécutable.delete_item(root_key, item_reg_key) - supprime l' item_reg_key au registre root_key donné. AVERTISSEMENT: Veuillez vous assurer que vous ne supprimez pas les clés aux touches de registre de niveau supérieur (par exemple HKEY_CLASSES_ROOT , HKEY_CURRENT_USER etc.)