Naar de inhoud
PyPath

pyRevit installeren en je eerste knop maken (stap voor stap)

Van installatie tot een eigen knop op het lint die je model telt. Met de mappenstructuur, een werkend script en de problemen waar iedereen tegenaan loopt.

4 min lezenBijgewerkt op 10 oktober 2026Gecontroleerd tegen de Revit API 2025-documentatie

Kort antwoord: download pyRevit van de officiële releasepagina en installeer het; in Revit verschijnt dan een tab pyRevit. Maak een map MijnTools.extension met daarin MijnTools.tab/Leidingen.panel/Tel leidingen.pushbutton/script.py, voeg die map toe in de instellingen van pyRevit en kies Reload. Je knop staat nu op het lint.

Wat is pyRevit?

pyRevit is een gratis, opensource add-in voor Revit. Het zet Python-scripts als knoppen op het lint: je schrijft een bestand script.py, pyRevit maakt er een knop van, en een klik voert je script uit met toegang tot de hele Revit-API. Geen Visual Studio, geen compileren.

pyRevit draait je scripts standaard in IronPython 2.7. Dat is Python zoals het rond 2010 was: f-strings bestaan daar nog niet. Je kunt per script ook kiezen voor Python 3 (CPython) met #! python3 op de eerste regel, maar niet alle hulpmodules van pyRevit werken dan. Schrijf daarom in knoppen het liefst "{}".format(waarde): dat werkt in allebei.

pyRevit installeren

  1. Sluit Revit.
  2. Download de installer van de officiële releasepagina van pyRevit. Bij het schrijven (oktober 2026) is de nieuwste versie 6.4.0, met ondersteuning tot en met Revit 2027.
  3. Installeer en start Revit. Je ziet een nieuwe tab pyRevit op het lint.

Op je werk heb je voor de installatie vaak de IT-afdeling nodig. pyRevit is open source en verstuurt zelf niets naar buiten; dat helpt bij de vraag. Oefenen kan intussen al zonder Revit, bijvoorbeeld in PyPath.

De mappenstructuur van een extensie

Een eigen set knoppen heet in pyRevit een extensie. Het is gewoon een map met submappen; de achtervoegsels van de mapnamen bepalen wat waar op het lint komt:

mappen
MijnTools.extension/
  MijnTools.tab/
    Leidingen.panel/
      Tel leidingen.pushbutton/
        script.py
        bundle.yaml
        icon.png
  • .extension: de hele set. Zet hem in een eigen map, bijvoorbeeld Documenten/pyRevit.
  • .tab: een eigen tab op het lint, met de naam vóór de punt.
  • .panel: een blok knoppen binnen die tab.
  • .pushbutton: één knop. De mapnaam is de tekst onder de knop.

Later zet je naast de tab een map lib met je eigen functies; pyRevit maakt die vanzelf bruikbaar in al je knoppen. Hoe dat werkt, staat in stap 5 van Python leren voor Revit.

Je eerste script.py

Begin met een knop die alleen iets leest: tellen hoeveel leidingen er in het model zitten. Lezen kan nooit iets kapotmaken.

Tel leidingen.pushbutton/script.py
# -*- coding: utf-8 -*-
from pyrevit import revit, DB, forms

aantal = (DB.FilteredElementCollector(revit.doc)
          .OfCategory(DB.BuiltInCategory.OST_PipeCurves)
          .WhereElementIsNotElementType()
          .GetElementCount())

forms.alert("Dit model bevat {} leidingen.".format(aantal),
            title="Leidingen tellen")
Melding op het nagebootste kasmodel
Leidingen tellen: Dit model bevat 45 leidingen.
  • De eerste regel vertelt IronPython dat het bestand UTF-8 is. Nodig zodra je tekens als é of ² gebruikt.
  • revit.doc is het actieve model; DB is Autodesk.Revit.DB.
  • De FilteredElementCollector zoekt de leidingen; WhereElementIsNotElementType() laat de leidingtypes weg.
  • forms.alert toont een melding in Revit. Liever een lijst? Gebruik print(): pyRevit opent dan een uitvoervenster.

De knop laden

  1. Open in Revit de tab pyRevit en kies de instellingen.
  2. Voeg bij de mappen voor eigen extensies (Custom Extension Directories) de map toe waarin MijnTools.extension staat. Dus de map erboven, niet de extensie zelf.
  3. Bewaar de instellingen en kies Reload. De tab MijnTools verschijnt met je knop.

Pas je daarna alleen script.py aan, dan zie je dat bij de volgende klik. Nieuwe knoppen, nieuwe mapnamen of een ander icoon vragen om een Reload.

Titel, tooltip en icoon

Met een bestand bundle.yaml naast het script geef je de knop een nette titel en een uitleg die verschijnt als je de muis erop houdt:

Tel leidingen.pushbutton/bundle.yaml
title: Tel leidingen
tooltip: Telt alle leidingen in het actieve model.
author: Mijn naam

Een icon.png in dezelfde map wordt het icoon. Werk je met het donkere thema van Revit, dan kun je er een icon.dark.png naast zetten.

Als het niet werkt

  • De knop verschijnt niet. Kloppen de achtervoegsels (.extension, .tab, .panel, .pushbutton)? Heb je de map boven de extensie toegevoegd? En heb je op Reload gedrukt?
  • SyntaxError bij een regel met f"...". De standaard-engine is IronPython 2.7 en kent geen f-strings. Schrijf "{}".format(...), of zet #! python3 op de eerste regel.
  • Rare tekens of een fout over de codering. Zet # -*- coding: utf-8 -*- bovenaan het script.
  • forms.alert doet het niet. Onder de Python 3-engine werkt pyrevit.forms niet; gebruik daar print().
  • Attempt to modify the model outside of transaction. Je script wijzigt iets buiten een transaction. Zie deze gids over die foutmelding.

Meer over pyRevit zelf staat in de documentatie van pyRevit.