HOWTO: Register a python plugin inside pcbnew Tools menu


#21

I added an other Action Script to my repo:

Maurice


#22

Thanks to @skuep, more detail about how to make a “clean” plugin:

While for single file plugins you can put that single file in the plugin directory, multiple files/complex plugin should be created with an other way. You can put all your files inside a sub-directory and put that sub-directory to the plugin directory.

An example:

  • ~/.kicad_plugin/ The main directory
  • MyPlugin/ Your plugin directory
    • _init_.py A single file to register the plugin
    • date_plugin.py The plugin himself
    • any other files

Content of date_plugin.py

import pcbnew
import re
import datetime

class text_by_date( pcbnew.ActionPlugin ):
    def defaults( self ):
        self.name = "Add date on PCB (onto a sub dir)"
        self.category = "Modify PCB"
        self.description = "Automaticaly add date on an existing PCB"
 
     def Run( self ):
         pcb = pcbnew.GetBoard()
         for draw in pcb.m_Drawings:
             if draw.GetClass() == 'PTEXT':
                 txt = re.sub( "\$date\$ [0-9]{4}-[0-9]{2}-[0-9]{2}",
                              "$date$", draw.GetText() )
             if txt == "$date$":
                 draw.SetText( "$date$ %s"%datetime.date.today() )

Content of _init_.py

from date_plugin import *
text_by_date().register()

Design Rules File load/save
#23

I can not add this plugin even I have copied the script to those directories, how can I fix it ?
I have refreshed plugin and restart kicad, but external plugin is still not displayed…??


#24

What version of KiCad, OS etc?
The plugin is for Nightly builds, not the “Stable” 4.0.x series


#25

It is nightly build version. Os is Ubuntu 16.04.
I can t refresh plugin and the script has been copied to plugin directory.
How can I fix it?
Thx


#26

It is kicad version 4.xx but I can not see it now. I m not on my computer.


#27

4.xx is not Nightly. Your two last posts are contradicting each other.


#28

Here’s the version I saw in Help --> About

Version : no-vcs-found-33048e7~59~ubuntu16.04.1,release build

Is that the right one ?


#29

I still can not add new external plugin, do you have any ideas why ?


#30

That is a very odd version name. Exactly which PPA are you using and when did you get it?


#31

I used this
sudo add-apt-repository --yes ppa:js-reynaud/ppa-kicad
sudo apt update
sudo apt install kicad
Is there any other repositories?


#32

That is the correct Nightly repository, rather than the 4.0.x Stable
As you did a manual install using apt, I am wondering when you grabbed this.


#33

I grabbed on Saturday, do I need to reinstall it?


#34

OK, I am more used to installing via Synaptic, which gives more meaningful names.
Did you also install kicad-library at the same time?
There is a 3rd package ,kicad-demo, but not essential

edit Do you have left overs from an older 4.0.x install, like kicad-common?


#35

That’s the version :

Application: kicad
Version: no-vcs-found-e3c64f1~59~ubuntu16.04.1, release build
Libraries:
wxWidgets 3.0.2
libcurl/7.47.0 OpenSSL/1.0.2g zlib/1.2.8 libidn/1.32 librtmp/2.3
Platform: Linux 4.4.0-93-generic x86_64, 64 bit, Little endian, wxGTK
Build Info:
wxWidgets: 3.0.2 (wchar_t,wx containers,compatible with 2.8)
Boost: 1.58.0
Curl: 7.47.0
KiCad compiler: GCC 5.4.0 with C++ ABI 1009
Build settings:
USE_WX_GRAPHICS_CONTEXT=OFF
USE_WX_OVERLAY=OFF
KICAD_SCRIPTING=ON
KICAD_SCRIPTING_MODULES=ON
KICAD_SCRIPTING_WXPYTHON=ON
KICAD_SCRIPTING_ACTION_MENU=ON
BUILD_GITHUB_PLUGIN=ON
KICAD_USE_OCE=ON

I can not add external plugins, I have copied files to the plugin
directories, anything else missing here ?


#36

I am thinking that apt might be missing dependencies or allowing you to have the wrong Python packages


#37

The *.py script is already in /usr/share/kicad/scripting/plugins

but I still can not activate it, anyone knows why ?

Thanks


#38

Try installing the plugin in a hidden directory ~/.kicad_plugins.
It is the only location where I can get them to work

Edit: I always forget this bit

Application: kicad
Version: (2017-08-26 revision db3491f38)-master, release build
Libraries:
wxWidgets 3.0.2
Platform: Linux 4.10.0-33-generic x86_64, 64 bit, Little endian, wxGTK
Build Info:
wxWidgets: 3.0.2 (wchar_t,wx containers,compatible with 2.8)
Boost: 1.62.0
KiCad compiler: GCC 6.3.0 with C++ ABI 1010
Build settings:
USE_WX_GRAPHICS_CONTEXT=OFF
USE_WX_OVERLAY=OFF
KICAD_SCRIPTING=ON
KICAD_SCRIPTING_MODULES=OFF
KICAD_SCRIPTING_WXPYTHON=OFF
KICAD_SCRIPTING_ACTION_MENU=ON
BUILD_GITHUB_PLUGIN=OFF
KICAD_USE_OCE=OFF


#39

I just had another quick look at this,
If you have cut and paste the code from the first ‘text_by_date’ example above to use as a script, then the code indentation below ‘def Run(self):’ is incorrect.

This will prevent it from showing in pcbnew External Plugins menu


#40

that one ?
def Run( self ):
pcb = pcbnew.GetBoard()
for draw in pcb.m_Drawings:

what should I fix with it ?