在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

用 VSCode 編寫自己的 KiCad 插件(下)

KiCad ? 來源:KiCad ? 作者:KiCad ? 2025-06-19 11:44 ? 次閱讀

很多小伙伴都想自己開發 KiCad 插件,但不知從何入手。本文由華秋電子的另一位 KiCad 開發者波波同學撰寫,分享了如何快速搭建環境,并開發一個簡單的插件。

wKgZPGhSNj2ACBiRAAYTeDU0iqI922.png

所有環境配置成功,接下來可以寫我們的python插件了。按照 kicad官方開發手冊,實現一個顯示PCB對應圖層的插件:

https://dev-docs.kicad.org/zh-cn/apis-and-binding/pcbnew/index.html

插件文件夾結構如下:

  • kicad_plugin/#插件目錄(Python)

  • - __init__.py #此文件在導入軟件包時執行(Pcbnew啟動時)

  • - __main__.py #調試python代碼時使用

  • - action_plugin.py # ActionPlugin派生類位于此處

  • - icon.png #插件圖標

  • - main_frame_view.py #其他Python代碼

  • - ui_main_frame.fbp # wxformbuilder生成的源代碼

  • - ui_main_frame.py # wxformbuilder生成的python代碼

[插件示例倉庫]:

https://github.com/Huaqiu-Electronics/my-kicad-plugin.git

代碼實現

1、插件頁面布局。

上文通過wxformbuilder生成了ui_main_frame.pyUiMainFrame類。新建 main_frame_view.py 文件,定義一個名為MainFrameView的類,它繼承自UiMainFrame,MainFrameView 繼承了 UiMainFrame 的所有屬性和方法。初始化一個帶有兩列的self.data_view_list控件,并設置列的樣式。

  • AppendTextColumn()方法用于向DataView中添加一個文本列。

fromui_main_frameimportUiMainFrame
classMainFrameView(UiMainFrame): def__init__(self, parent):   super().__init__(parent)     self.data_view_list.AppendTextColumn(     "ID",     0,      width=50,      align=wx.ALIGN_CENTER,      flags=dv.DATAVIEW_COL_RESIZABLE,    )    self.data_view_list.AppendTextColumn(     "Layer",     1,      width=170,      align=wx.ALIGN_CENTER,      flags=dv.DATAVIEW_COL_RESIZABLE,    )

2、加載PCB對象。

首先嘗試獲取當前 PCB 文件的文件名。pcbnew.GetBoard()返回當前加載的 PCB 對象,并將 PCB 對象賦值給self.board 。如果加載失敗,則嘗試加載一個指定路徑的文件,使用pcbnew.LoadBoard() 方法加載該pcb文件,并將返回的 PCB 對象賦值給 self.board。

   try:     #通過 kicad 打開插件時調用      pcbnew.GetBoard().GetFileName()     self.board = pcbnew.GetBoard()    exceptExceptionase:     # VSCode 調試插件時調用      fp ="C:\Program Files\demos\flat_hierarchy\flat_hierarchy.kicad_pcb"# Replace with your own PCB file path.     ifos.path.exists(fp):       self.board = pcbnew.LoadBoard(fp)     else:       print("File not find")

3、從 KiCad 的 PCB 文件中獲取可見圖層的信息,并將這些信息添加到一個DataView控件中。

  • GetVisibleLayers() 方法返回一個包含所有可見圖層的集合。

  • GAL_LayerSet 是用于管理KiCad 圖層的類。

  • gal_set.Seq() 返回一個包含所有可見圖層編號的序列。

  • AppendItem(data) 方法將 data 列表中的內容作為一行添加到 DataView 控件中。

 deffill_list_data(self):    data = []    gal_set = self.board.GetVisibleLayers()   fornumin[xforxingal_set.Seq()]:      layerName = self.board.GetLayerName(num)      data = [str( num ), layerName ]      self.data_view_list.AppendItem(data)

4、顯示特定圖層的實現。

on_show_layer()方法是一個事件處理函數,用于在 KiCad 的 GUI 中顯示或隱藏特定的圖層。on_show_layer() 方法與一個事件項關聯綁定,當用戶觸發該事件時,它會根據用戶在DataView控件中的選擇來顯示特定圖層。

  • GetSelectedRow()方法返回當前選中的行索引。
  • GetValue(row, column)方法獲取指定行和列的值。
  • SetVisibleLayers(gal_set)設置可見圖層集合。
  • UpdateUserInterface()方法更新 KiCad 的用戶界面,以反映圖層的更改。

  def on_show_layer(self, event):    selection = self.data_view_list.GetSelectedRow()    item_data = self.data_view_list.GetValue(selection,0)    self.board.SetVisibleAlls()    gal_set = self.board.GetVisibleLayers()    for num in [x for x in gal_set.Seq()]:      ifstr(num) == item_data:        continue      gal_set.removeLayer(num)    self.board.SetVisibleLayers(gal_set)    pcbnew.UpdateUserInterface()    wx.CallAfter(pcbnew.Refresh)    event.Skip()    pass
使用wx.dataview.DataViewCtrlBind方法來綁定事件處理函數。通過單擊事件調用 on_show_layer() 方法。
  • dv.EVT_DATAVIEW_SELECTION_CHANGED 是一個事件類型,表示用戶通過單擊激活數據項。

   self.data_view_list.Bind(      dv.EVT_DATAVIEW_SELECTION_CHANGED,self.on_show_layer    )

5、啟動一個基于wxPython的獨立應用程序。

__main__.py中啟動插件。從 wx 模塊中導入 App 類,定義一個名為StandAloneApp的類繼承自 App。StandAloneApp用于管理應用程序的生命周期,并在主程序中實例化該類,顯示主窗口。

  • Show()方法顯示主窗口。

  • app.MainLoop()方法啟動應用程序的主事件循環。MainLoop負責處理用戶交互、窗口更新等事件。

fromwximportApp
classStandAloneApp(App): # StandAloneApp 類繼承自 wx.App。用于管理應用程序的生命周期。 def__init__(self):   super().__init__()
if__name__ =="__main__":  app = StandAloneApp() frommain_frame_viewimportMainFrameView  MainFrameView(None).Show()  app.MainLoop()

6、通過VSCode調試KiCad插件,在__main__.py頁面下,點擊Python Debugger:Debuge Python File”,出現GUI圖形界面則表示運行成功。到這里KiCad插件調試成功。

wKgZPGhSNj6AXfkaAAKXiQRTdCU350.png

7、定義 KiCad 插件。

action_plugin.py 定義一個名為 Plugin 的類,繼承自 pcbnew.ActionPlugin。ActionPlugin 是 KiCad 提供的基類,用于創建插件。當用戶通過菜單或工具欄按鈕觸發插件時,Run() 方法被調用,顯示插件的主界面。

  • self.name設置插件的名稱,顯示在 KiCad 的菜單或工具欄中。
  • self.category設置插件的類別,用于在 KiCad 的菜單中組織插件。
  • self.description 插件的功能描述,顯示在 KiCad 的插件管理器中。

  • self.icon_file_name 設置插件的圖標文件路徑。

  • self.dark_icon_file_name 設置插件的深色模式圖標文件路徑。

importpcbnewimportosimportwx
# 插件入口classPlugin(pcbnew.ActionPlugin): def__init__(self):    self.name ="MyPlugin"# 插件名稱    self.category ="Manufacturing"# 描述性類別名稱    self.description ="To show or to hide layer."# 對插件及其功能的描述    self.show_toolbar_button =True# 可選,默認為 False    self.icon_file_name = os.path.join(os.path.dirname(__file__),"icon.png") # 可選,默認為 ""    self.dark_icon_file_name = os.path.join(os.path.dirname(__file__),"icon.png")
 defRun(self):   frommain_frame_viewimportMainFrameView    MainFrameView(None).Show()

8、在kicad中加載和注冊插件。

__init__.py 文件,通過動態修改sys.path來確保插件模塊可以被正確導入,并調用插件的注冊方法。
  • PLUGIN_ROOT設置為當前腳本文件所在的目錄路徑。
  • Plugin().register() 創建Plugin類的一個實例,并調用該實例的register()方法注冊插件
importsysimportos
PLUGIN_ROOT=os.path.dirname(os.path.abspath(__file__))
ifPLUGIN_ROOT not in sys.path:  sys.path.append(PLUGIN_ROOT)
from action_pluginimportPluginPlugin().register()

9、插件代碼完成之后就可以使用自己編寫的插件了。在PCB中打開“工具-->外部插件-->打開插件目錄”,進入到插件目錄,將插件頁面放在kicad插件目錄下面:”C:UsershafDocumentsKiCad9.0scriptingplugins或同級目錄下的C:UsershafDocumentsKiCad9.03rdpartyplugins”。插件如下圖,通過點擊就可以顯示對應的PCB圖層了。

wKgZPGhSNj6AZkkyAAZZlRVfO5s414.png

結束語

編寫KiCad插件是一個需要深入了解KiCad API的過程,而且代碼的具體實現細節可能會比較復雜。如果你在開發過程中遇到具體的問題,可以查閱KiCad的 官方文檔或在相關的開發者社區尋求幫助。此外,確保你的代碼能夠適應KiCad版本的更新,以保持插件的長期可用性。

另外,從 KiCad 9 開始,將逐漸使用 IPC API 逐漸取代原來的 SWIG 方式。詳情可以參考:KiCad 9 引入新的API機制。


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 插件
    +關注

    關注

    0

    文章

    340

    瀏覽量

    22983
  • KiCAD
    +關注

    關注

    5

    文章

    244

    瀏覽量

    9376
  • vscode
    +關注

    關注

    1

    文章

    169

    瀏覽量

    8406
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    VSCode編寫自己KiCad插件(上)詳細步驟教程

    “ ?很多小伙伴都想自己開發 KiCad 插件,但不知從何入手。本文由華秋電子的另一位 KiCad 開發者波波同學撰寫,分享了如何快速搭建環境,并開發一個簡單的
    的頭像 發表于 06-17 11:10 ?815次閱讀
    <b class='flag-5'>用</b><b class='flag-5'>VSCode</b><b class='flag-5'>編寫</b><b class='flag-5'>自己</b>的<b class='flag-5'>KiCad</b><b class='flag-5'>插件</b>(上)詳細步驟教程

    KiCad直播活動(三):在 Windows上編譯KiCad 手把手教您編譯/構建 KiCad 源碼

    KiCad 貼紙,趕緊報名參加吧~ 直播安排 在 Windows 上編譯 KiCad 時間:3月27日 19:30 內容:手把手幫助您從頭開始學習編譯 KiCad 代碼。 后續精彩內容:
    的頭像 發表于 03-24 11:14 ?708次閱讀
    <b class='flag-5'>KiCad</b>直播活動(三):在 Windows上編譯<b class='flag-5'>KiCad</b> 手把手教您編譯/構建 <b class='flag-5'>KiCad</b> 源碼

    使用 QWQ:32B 模型搭配 VSCode 的 Cline 插件實現自動化代碼編程!

    。結合 Visual Studio Code(VSCode)的 Cline 插件,開發者可以實現高效的自動化代碼編程。本文將詳細介紹如何配置和使用 QWQ:32B 模型與 Cline 插件,以提升編程
    的頭像 發表于 03-21 18:12 ?521次閱讀
    使用 QWQ:32B 模型搭配 <b class='flag-5'>VSCode</b> 的 Cline <b class='flag-5'>插件</b>實現自動化代碼編程!

    在 MAC mini4 上使用 VSCode 和 Cline 插件對接 Deepseek-R1:32b 的完整指南

    可以在 MAC mini4 上高效地編寫和調試代碼。本教程將詳細介紹如何在 MAC mini4 上配置 VSCode 和 Cline 插件,并成功對接 Deepseek-R1:32b,幫助您提升開發效率
    的頭像 發表于 03-11 17:14 ?524次閱讀
    在 MAC mini4 上使用 <b class='flag-5'>VSCode</b> 和 Cline <b class='flag-5'>插件</b>對接 Deepseek-R1:32b 的完整指南

    KiCad 9.0.0 正式發布

    /kicad/windows/stable/kicad-9.0.0-x86_64.exe 我們衷心感謝過去一年為 KiCad 作出貢獻的每一位成員。無論您的貢獻是編寫代碼、提交錯誤報告
    的頭像 發表于 02-21 11:12 ?1435次閱讀
    <b class='flag-5'>KiCad</b> 9.0.0 正式發布

    KiCad 9 引入新的API機制

    “ ?在FOSDEM 2025的演講中,核心開發者Jon Evans揭秘了KiCad 9的全新API系統,徹底重構插件生態,為開發者與用戶帶來更穩定、高效的體驗。 ? ” 舊系統痛點:Python
    的頭像 發表于 02-10 11:13 ?922次閱讀
    <b class='flag-5'>KiCad</b> 9 引入新的API機制

    KiCad 9 探秘(二):多通道設計工具

    “ ?Replicate Layout 插件終于可以淘汰了。KiCad 9 自帶了多通道設計工具,比 Replicate Layout 更強大,更穩定! ? ” 又是一個千呼萬喚始出來的功能,熟悉
    的頭像 發表于 01-03 11:21 ?2430次閱讀
    <b class='flag-5'>KiCad</b> 9 探秘(二):多通道設計工具

    KiCon演講回顧(二):華秋 KiCad 發行版

    的問題);某些新功能因為 KiCad 本身的限制也無法短期內實現(比如原理圖中支持插件、元器件的概念等);當然也希望通過發行版,預裝一些插件,方便用戶打通供應鏈、設計和制造(比如DFM插件
    的頭像 發表于 11-21 14:00 ?3976次閱讀

    KiCad插件大全

    感謝Hayden同學的整理! 插件使用方式 1. 解壓縮插件包到KICAD插件目錄。例如,在Windows上可能是:C:Program
    的頭像 發表于 11-12 12:24 ?2200次閱讀

    KiCad常用資源

    KiCad官網https://www.kicad.org/ KiCad社區 KiCad 英文論壇:? https://forum.kicad
    的頭像 發表于 11-12 12:24 ?1763次閱讀
    <b class='flag-5'>KiCad</b>常用資源

    VSCode批量遷移插件

    代碼的路 打開之前電腦,找到原電腦VS Code的插件安裝目錄: 如: C:\\\\Users\\\\用戶名\\\\.vscode\\\\extensions 將extensions文件夾拷貝到
    的頭像 發表于 11-06 16:04 ?687次閱讀
    <b class='flag-5'>VSCode</b>批量遷移<b class='flag-5'>插件</b>

    VSCode插件的安裝和使用

    今天介紹一款我工作上經常用到的一款VSCode插件-VsCode Action Buttons,這個插件可以釋放手敲命令行清除、編譯、運行、部署到目標機等操作,具體功能可由開發者自由
    的頭像 發表于 11-04 15:36 ?798次閱讀
    <b class='flag-5'>VSCode</b><b class='flag-5'>插件</b>的安裝和使用

    KiCad 中使用華秋 DFM 插件

    “在 KiCad 中使用華秋DFM插件,高效完成工藝規則檢查,且可以根據檢測結果直接在 PCB 中進行修改?!? 華秋 DFM 插件介紹 DFM 插件可以幫助您在
    發表于 08-18 22:15

    env工具生成rt-thread的工程文件,vscode編譯報錯的原因?

    使用vscode的eide插件可以編譯裸機的國民技術芯片,我env工具生成rt-thread的工程文件,keil編譯無問題,vscode編譯報錯
    發表于 07-11 08:31

    VSCODE安裝ESP-ADF插件失敗怎么解決?

    VSCODE安裝ADF插件時,下載完后提示錯誤ESP-ADF clone has exit with 1,我試了很多次還是不成功,看硬盤文件夾里面已經下載了ADF這個文件夾里面有下載的文件。錯誤提示
    發表于 06-28 07:59
    主站蜘蛛池模板: 泰国一级毛片aaa下面毛多 | 欧美成人三级伦在线观看 | 午夜精 | 欧美激情一欧美吧 | 亚洲视频精品 | 午夜爱爱小视频 | 狠狠艹视频| 婷婷综合 在线 | 欧美怡红院免费全视频 | 日韩免费视频一区 | 无遮挡很爽很污很黄很色的网站 | 97伊人久久 | 加勒比色 | 香蕉视频一级 | 亚洲视频在线视频 | 国产一区在线播放 | 美女被网站免费看九色视频 | 91精品国产免费久久久久久青草 | 天天激情| 在线观看国产久青草 | 欧美啊片 | 日韩欧美印度一级毛片 | 成年片色大黄全免费网址 | 国语对白一区二区三区 | 俺也来俺也去俺也射 | 四虎永久免费最新在线 | 亚洲综合伊人 | 亚洲网站在线看 | 五月婷婷六月丁香 | 高清性色生活片欧美在线 | 欧美日韩在线成人免费 | 国产不卡毛片 | 最近最新中文字幕在线第一页 | 免费在线看a | 亚洲黄色影片 | 天天做天天做天天综合网 | 国产精品yy9299在线观看 | 一级国产特黄aa大片 | a毛片基地免费全部香蕉 | 永久精品免费影院在线观看网站 | 天天操天天干天天 |