top of page

PySide2 Example Script

  • Writer: Simon Gibson
    Simon Gibson
  • Aug 26, 2025
  • 2 min read

Updated: Nov 11, 2025


What does it do?

This is an example PySide2 script. It allows you to select any node in your project from the popup window.


Note: This script will only work with PFTrack Enterprise 24.08.22 and onwards



Downloads:



Script:

import pfpym

import PySide2
from PySide2 import QtWidgets, QtCore
from PySide2.QtWidgets import QApplication, QDialog, QPushButton, QGridLayout, QVBoxLayout, QLabel
from PySide2.QtCore import QSignalMapper

def pfMacroName():
    return 'PySide2 Dialog'


class Form(QDialog):

    def __init__(self, tree, parent = None):
        super(Form, self).__init__(parent)
        self.setWindowTitle("PySide2 Example")

        self.tree = tree

        vl = QVBoxLayout()
        vl.addWidget(QLabel("Jump to a node by clicking on a button"))
        
        gl = QGridLayout()
        vl.addLayout(gl)

        mapper = QSignalMapper(self)
        mapper.mapped[str].connect(self.button_clicked)

        # create a button for each node in the tree
        row = 0
        col = 0
        for i in range(self.tree.getNumNodes()):

            name = tree.getNode(i).getName()

            # create the button and store its name with the signal mapper
            b = QPushButton(name)
            b.clicked.connect(mapper.map)
            mapper.setMapping(b, name)

            # add to the grid layout
            gl.addWidget(b, row, col)

            col += 1
            if col == 4 :
                col = 0
                row += 1

        if row == 0 and col == 0 :
            l = QLabel("Error: No nodes in the tree. Create some nodes and try again")
            gl.addWidget(l, 1, 0)
                
        self.setLayout(vl)

    @QtCore.Slot(str)
    def button_clicked(self, name):
        
        # find the node in the tree
        for i in range(self.tree.getNumNodes()):

            if self.tree.getNode(i).getName() == name :

                print("Activating node " + name)
                n = self.tree.getNode(i)                

                # fetch the node position
                pos = n.getPosition()
                
                # move to the centre of the viewport
                self.tree.setPosition(pos[0], pos[1])

                # select the node and activate the editor
                self.tree.activateEditor(n)

                # uncomment to close the dialog as soon as the editor is activated
                #self.accept();

                break;


def main(tree):

    # QApplication is already built, so just exec the dialog and
    # wait for it to run inside the application's event loop
    
    form = Form(tree)
    form.exec()

    # cleanp
    form.deleteLater()
   

Links:

Head back to PFTrack Resources. Or check out our Learning Articles for a deeper look at camera tracking and matchmoving concepts. Or visit our PFTrack Tutorials for step-by-step video guides covering the fundamentals of camera tracking and matchmoving in PFTrack.



 
 
bottom of page