Control UI Toolkit User Manual Logo
3.0.0

Table of Contents

  • 1. Introduction
    • 1.1. Scope
    • 1.2. Definitions
    • 1.3. Conventions
    • 1.4. Overview
    • 1.5. Source Code
    • 1.6. Previous Release
  • 2. Release Notes
    • 2.1. Summary
      • 2.1.1. What is the purpose of this release?
      • 2.1.2. What is the scope of this version?
      • 2.1.3. Limitations and Constraints
    • 2.2. Dependencies
      • 2.2.1. Development Environment ETL DevEnv
      • 2.2.2. Core Integration Infrastructure CII
      • 2.2.3. Qt
      • 2.2.4. PySide
      • 2.2.5. Shiboken
      • 2.2.6. PTK
      • 2.2.7. msgsend
  • 3. Installation
    • 3.1. Using RPM Packages
    • 3.2. Manual Compilation
    • 3.3. Vagrant Virtual Machine
  • 4. Tutorials
    • 4.1. Beginners Tutorial
      • 4.1.1. Starting the Demo Service
      • 4.1.2. Lets check functionality
      • 4.1.3. Basic Concepts from Qt
      • 4.1.4. Qt Signals and Slots with one widget
      • 4.1.5. Qt Layouts
      • 4.1.6. Qt Signals and Slots with two widgets
      • 4.1.7. Taurus Introduction
      • 4.1.8. Model View Controller Pattern
      • 4.1.9. URIs
      • 4.1.10. Taurus Model
      • 4.1.11. Taurus Model Plugins
      • 4.1.12. Taurus Model Plugin: OLDB
      • 4.1.13. Taurus Widgets: TaurusLabel
      • 4.1.14. Taurus Widgets: Fragments
      • 4.1.15. Taurus Widgets: TaurusForm
      • 4.1.16. Taurus Widgets: TaurusPlot and TaurusTrend
      • 4.1.17. Taurus Widgets: TaurusLauncherButton
      • 4.1.18. Taurus Model Plugin: Evaluation
      • 4.1.19. Taurus Command Line Tool
      • 4.1.20. Taurus Widgets
      • 4.1.21. Taurus Display Widgets
      • 4.1.22. Input Widgets
      • 4.1.23. Plotting Widgets
      • 4.1.24. Qt and UI Files
    • 4.2. Python Application Tutorial
      • 4.2.1. Download, Compilation, and Running
      • 4.2.2. Project Structure
        • 4.2.2.1. Project wscript
        • 4.2.2.2. Module wscript
      • 4.2.3. Entry Point Python Script
      • 4.2.4. Design of the Graphical User Interface
        • 4.2.4.1. Widgets Connections
        • 4.2.4.2. Actions
      • 4.2.5. Implementation of the User Interface
        • 4.2.5.1. Long Running Jobs
      • 4.2.6. Adding a Dock Widget and Logs Widget
        • 4.2.6.1. Dock Widget
        • 4.2.6.2. Logs Widget
        • 4.2.6.3. Trying it out
      • 4.2.7. Frequently Asked Question
        • 4.2.7.1. I have connected a signal and slot, but nothing is happening. What is missing?
        • 4.2.7.2. What causes the GUI to freeze?
    • 4.3. Widget Library Tutorial
      • 4.3.1. Introduction
      • 4.3.2. Kind of Widgets
        • 4.3.2.1. WAF Project
      • 4.3.3. Widgets WAF Module
        • 4.3.3.1. Header (.hpp)
        • 4.3.3.2. Implementation (.cpp)
        • 4.3.3.3. Header file
        • 4.3.3.4. Compilation
        • 4.3.3.5. Thoughts on Widgets Properties, Signal and Slots
      • 4.3.4. Plugin WAF Module
        • 4.3.4.1. Header files
        • 4.3.4.2. Implementation
      • 4.3.5. Bindings
        • 4.3.5.1. Input for Bindings
        • 4.3.5.2. Code generation
        • 4.3.5.3. Compilation
      • 4.3.6. Taurus Databinding Widgets
        • 4.3.6.1. Taurus Controller
        • 4.3.6.2. Taurus Widget
      • 4.3.7. Multiple Widgets
    • 4.4. RAD Hello Tutorial
      • 4.4.1. Introduction
        • 4.4.1.1. Definitions
        • 4.4.1.2. Conventions
        • 4.4.1.3. Download, Compilation, and Running
      • 4.4.2. Project Structure
        • 4.4.2.1. Project Definition (wscript)
        • 4.4.2.2. Module Definition (cut_rad_hello/wscript)
        • 4.4.2.3. Entry Point Python Script (cut_rad_hello/src/cut_rad_hello.py)
      • 4.4.3. Graphical Design Updates (cut_rad_hello/src/cut_rad_hello/mainwindow.ui)
        • 4.4.3.1. New Menu: Server
        • 4.4.3.2. Deleted QTextEdit widget
        • 4.4.3.3. A new QGroupBox
        • 4.4.3.4. A second QGroupBox
      • 4.4.4. StdCmds Interface (cut_rad_hello/src/cut_rad_hello/stdcmdsfacade.py)
        • 4.4.4.1. Imports
        • 4.4.4.2. Class Definition and Initializator
        • 4.4.4.3. Interface Methods with no Arguments
        • 4.4.4.4. Interface Method with Argument
      • 4.4.5. UI Implementation (cut_rad_hello/src/cut_rad_hello/applicationwindow.py)
        • 4.4.5.1. Imports
        • 4.4.5.2. Initialization
        • 4.4.5.3. closeEvent()
        • 4.4.5.4. Server (dis)connection Slots
        • 4.4.5.5. Slots for methods in the interface
        • 4.4.5.6. Starting Hellocii process
      • 4.4.6. RAD Tutorial Second Part
        • 4.4.6.1. OLDB Data Points (cut_rad_hello_custom/src/cut_rad_hello_custom/mainwindow.ui)
        • 4.4.6.2. Preset Command
        • 4.4.6.3. Replace QeDartBoard by QeRaDec (cut_rad_hello_custom/src/cut_rad_hello_custom/mainwindow.ui)
  • 5. Examples
    • 5.1. Python Application
    • 5.2. Widget Library
    • 5.3. Analog Clock
    • 5.4. Complex Application
    • 5.5. Color Scheme
    • 5.6. Form Item Factory
    • 5.7. cutDemoService
    • 5.8. RAD Hello GUI
    • 5.9. RAD Hello Custom GUI
  • 6. Widget Creation
    • 6.1. Common to all kind of widgets
      • 6.1.1. Widget Class Declaration
      • 6.1.2. WAF project/module for the Widget
    • 6.2. Creating a New Widget
      • 6.2.1. update() and paintEvent() methods
      • 6.2.2. event(QEvent*) and specialized event methods
      • 6.2.3. Colors and Palette
      • 6.2.4. Fonts
      • 6.2.5. Coordinates
      • 6.2.6. save() and restore()
      • 6.2.7. Widget Size and Ratio
      • 6.2.8. Caching Pixmaps
      • 6.2.9. Plugin, Bindings and Example Application
    • 6.3. Specialize an Existing Widget
      • 6.3.1. Declaration
      • 6.3.2. Implementation
    • 6.4. Create a Composite Widget from Existing Ones
      • 6.4.1. UI Declaration
      • 6.4.2. Widget Class
  • 7. GUI Development
    • 7.1. CLI Options and Arguments
    • 7.2. Data Manipulation and Taurus
    • 7.3. Data Units and Conversion
    • 7.4. WAF and Project Structure for Bigger Applications
    • 7.5. Connecting to MAL or OLDB
    • 7.6. Logging
    • 7.7. Widgets and Application properties as Configurable
    • 7.8. Complex UI
    • 7.9. Declarative UI
    • 7.10. Widget Promotion
    • 7.11. Auto Slot Connection
    • 7.12. Declarative Databinding
    • 7.13. Models
    • 7.14. Taurus Model Plugin Development
    • 7.15. Debugging
      • 7.15.1. Taurus Log Level
      • 7.15.2. OLDB GUI
      • 7.15.3. GDB
      • 7.15.4. Python faulthandler
      • 7.15.5. Python Debugger
      • 7.15.6. Profiler
  • 8. GUI Testing
    • 8.1. pytest-qt caveats
      • 8.1.1. Timeout on tests but the exact time does not pass, do not call QApplication.quit()
  • 9. Color Schemes
    • 9.1. QPalette
      • 9.1.1. ColorGroups
      • 9.1.2. ColorRoles
    • 9.2. QeColorsModel
    • 9.3. QeColorsMenu
  • 10. Standalone Tools
    • 10.1. cutWidgetsShowcase and cutWidgetsShowcasePy
    • 10.2. cutExampleColorScheme and cutExampleColorSchemeCpp
    • 10.3. cutDemoService
  • 11. API
  • 12. Frequently Asked Question
    • 12.1. Python Bindings
      • 12.1.1. How do I use the widget?
      • 12.1.2. If I connect a signal to one of the widget’s slots, it does nothing.
      • 12.1.3. PySide::Signal namespace not found
      • 12.1.4. If I connect a signal to one of the widget’s slots and trigger it, the application crashes with a Segmentation Fault.
      • 12.1.5. A symbol is missing (a method), and it is from my widgets:
      • 12.1.6. Application crash on startup, indicates Qt_5_6 version is used, but it was compiled against Qt_5_14
      • 12.1.7. My application crashes, in a section that is C++, how can I get a back trace
    • 12.2. Widget Library
      • 12.2.1. Why the separation between the widget and plugin library
      • 12.2.2. The widget plugin does not load
      • 12.2.3. What method of library is used for bindings
      • 12.2.4. Why is there a header called “libraryname.h”
      • 12.2.5. libraryname.h? why not libraryname.hpp?
      • 12.2.6. I have created a templated QObject, but it does not compile. What am I doing wrong?
      • 12.2.7. paintEvent() is not called in python
    • 12.3. Qt in General
      • 12.3.1. How to start a process and monitor if it is still running?
  • 13. Qt5 to Qt6 (DevEnv5 to DevEnv6) Migration Guide
    • 13.1. wscript (Project)
    • 13.2. wscript (Configuration)
    • 13.3. wscripts (modules)
    • 13.4. Python Code changes
    • 13.5. Python Bindings for Qt Widgets
    • 13.6. Others
Control UI Toolkit User Manual
  • 4. Tutorials
  • 4.2. Python Application Tutorial

4.2. Python Application Tutorial

This documents teaches the reader how to develop a basic GUI application using Python, PySide and Taurus, from scratch.

The reader will learn how to configure WAF, create an entry point program, design a UI, and create the implementation of the behavior for said UI.

  • 4.2.1. Download, Compilation, and Running
  • 4.2.2. Project Structure
    • 4.2.2.1. Project wscript
    • 4.2.2.2. Module wscript
  • 4.2.3. Entry Point Python Script
  • 4.2.4. Design of the Graphical User Interface
    • 4.2.4.1. Widgets Connections
    • 4.2.4.2. Actions
  • 4.2.5. Implementation of the User Interface
    • 4.2.5.1. Long Running Jobs
  • 4.2.6. Adding a Dock Widget and Logs Widget
    • 4.2.6.1. Dock Widget
    • 4.2.6.2. Logs Widget
    • 4.2.6.3. Trying it out
  • 4.2.7. Frequently Asked Question
    • 4.2.7.1. I have connected a signal and slot, but nothing is happening. What is missing?
    • 4.2.7.2. What causes the GUI to freeze?
Previous Next

© Copyright 2023 ESO - European Southern Observatory.