MCPcopy Index your code
hub / github.com/UmSenhorQualquer/pyforms

github.com/UmSenhorQualquer/pyforms @v.0.1.3

Chat with this repo
repository ↗ · DeepWiki ↗ · release v.0.1.3 ↗ · + Follow
928 symbols 2,078 edges 145 files 87 documented · 9%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Important
If you find this project useful, please, do not forget to star it it.

New version available

Pyforms

Pyforms is a Python 2.7.x and 3.x cross-enviroment framework to develop GUI applications, which promotes modular software design and code reusability with minimal effort.

It offers:

  • A Python layer of Desktop forms, based on PyQt, OpenGL and other libraries.
  • A Python layer that allow applications to run on Desktop GUI, Web and terminal without requiring code modifications.
  • A group of rules and methodologies that help the developer maintaining his code short, clean, reusable and readable.

Diagram

Example of an application running in the Desktop, Web and Terminal enviroments:

Application-Example

Advantages

  • With a minimal API, interfaces are easily defined using a short Python code.
  • Avoid the constant switching between the GUI designers and the Python IDE.
  • It is designed to allow the coding of advanced functionalities with a minimal effort.
  • The code is organized in modules and prepared to be reused by other applications.
  • It makes the applications maintenance easier.
  • Turn the prototyping much easier and fast.
  • Due to its simplicity it has a low learning curve.

Examples of applications developed in Pyforms

Documentation

The documentation is still in development, but you can find a preview on pyforms.readthedocs.org

Installation

Check the documentation pyforms.readthedocs.org

License

Pyforms is open-source library under the MIT license.

Rationale behind the framework

The development of this library started with the necessity of allowing users with low programming skills to edit parameters of my python scripts. The idea was to transform scripts which had already been developed into GUI applications with a low effort and in a short time.

For example in my computer vision applications in the majority of the times there were variables that had to be set manually in the scripts for each video, to adjust the thresholds, blobs sizes, and other parameters to the environment light conditions... To test each set of parameters the script had to be executed. With GUI applications, users would be able to set the parameters using a GUI interface and visualize the results instantly without the need of restarting the script. That was the idea.

After looking into the several python options for GUI interfaces, PyQt was the one that seemed the best tool for a fast development with the QtDesigner, but after a while developing in Qt, switching between the designer and the python IDE was becoming too costly in terms of time, because the interfaces were constantly evolving, and it was tedious, because GUI controls were repeated several times.

Being a Django developer, I did get inspiration on it for this framework. In the Django Models we just need to define the type of variables and their disposition in the form (in ModelAdmin) to generate a HTML form for data edition. For the GUIs that I wanted to build for my python scripts, I would like to have the same simplicity, because I did wanted to focus on the algorithms and not on GUIs developing.

The result was the simplicity that we can see in the example below:

class ComputerVisionAlgorithm(BaseWidget):

    def __init__(self):
        super(ComputerVisionAlgorithm,self).__init__('Computer vision algorithm example')

        #Definition of the forms fields
        self._videofile     = ControlFile('Video')
        self._outputfile    = ControlText('Results output file')
        self._threshold     = ControlSlider('Threshold', 114, 0,255)
        self._blobsize      = ControlSlider('Minimum blob size', 100, 100,2000)
        self._player        = ControlPlayer('Player')
        self._runbutton     = ControlButton('Run')

        #Define the function that will be called when a file is selected
        self._videofile.changed     = self.__videoFileSelectionEvent
        #Define the event that will be called when the run button is processed
        self._runbutton.value       = self.__runEvent
        #Define the event called before showing the image in the player
        self._player.processFrame   = self.__processFrame

        #Define the organization of the Form Controls
        self._formset = [ 
            ('_videofile', '_outputfile'), 
            '_threshold', 
            ('_blobsize', '_runbutton'), 
            '_player'
        ]


    def __videoFileSelectionEvent(self):
        """
        When the videofile is selected instanciate the video in the player
        """
        self._player.value = self._videofile.value

    def __processFrame(self, frame):
        """
        Do some processing to the frame and return the result frame
        """
        return frame

    def __runEvent(self):
        """
        After setting the best parameters run the full algorithm
        """
        pass

ScreenShot

Core symbols most depended-on inside this repo

repaint
called by 44
pyforms/gui/Controls/ControlImage.py
ControlText
called by 27
pyforms/web/django/pyforms.js
width
called by 21
pyforms/gui/Controls/ControlOpenGL.py
items
called by 19
pyforms/gui/Controls/ControlCombo.py
addItem
called by 18
pyforms/gui/Controls/ControlTree.py
height
called by 18
pyforms/gui/Controls/ControlOpenGL.py
items
called by 17
pyforms/web/Controls/ControlCombo.py
setValue
called by 15
pyforms/gui/Controls/ControlList.py

Shape

Method 746
Class 112
Function 70

Languages

Python97%
TypeScript3%

Modules by API surface

pyforms/gui/Controls/ControlPlayer/ControlPlayer.py40 symbols
pyforms/gui/Controls/ControlEventTimeline/TimelineWidget.py35 symbols
pyforms/web/Controls/ControlBase.py27 symbols
pyforms/gui/Controls/ControlTree.py26 symbols
pyforms/gui/Controls/ControlList.py26 symbols
pyforms/gui/Controls/ControlEventTimeline/ControlEventTimeline.py26 symbols
pyforms/terminal/Controls/ControlBase.py24 symbols
pyforms/gui/Controls/ControlOpenGL.py24 symbols
pyforms/gui/Controls/ControlPlayer/VideoGLWidget.py23 symbols
pyforms/gui/Controls/ControlImage.py22 symbols
pyforms/web/PyFormsStateMachine.py21 symbols
pyforms/gui/Controls/ControlBase.py20 symbols

For agents

$ claude mcp add pyforms \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact