File Types

There are many different file types that you will encounter while developing Qt for Python applications, ui, qrc, qml, pyproject, etc. Here you can find a simple explanation for each of them.

Python Files .py

Python files are the main format you will be dealing with, while developing Qt for Python projects.

It is important to note that you can write applications only with Python files, without the need of .ui, .qrc, or .qml files, however using other formats will facilitate some processes, and enable new functionality to your applications.

class MyWidget(QWidget):
    def __init__(self):
        QWidget.__init__(self)

        self.hello = ["Hallo Welt", "你好,世界", "Hei maailma",
            "Hola Mundo", "Привет мир"]

        self.button = QPushButton("Click me!")
        self.text = QLabel("Hello World")
        self.text.setAlignment(Qt.AlignCenter)
        # ...

User Interface Definition File .ui

When using Qt Designer, you can create user interfaces using Qt Widgets with the WYSIWYG form editor, this interface is represented as a widget tree using XML. Here is an extract of the beginning of a .ui file:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>400</width>
    <height>300</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralWidget">
...

The pyside6-uic tool generates Python code from these .ui files, which you can import from your main files, so it is not necessary for you to include the .ui files in your deployed application.

For more details, see Using .ui files from Designer or QtCreator with QUiLoader and pyside6-uic.

Resource Collection Files .qrc

List of binary files that will be used alongside your application. As an XML-based file, its structure look like this:

<!DOCTYPE RCC><RCC version="1.0">
<qresource>
    <file>images/quit.png</file>
    <file>font/myfont.ttf</file>
</qresource>
</RCC>

The pyside6-rcc tool generates Python code from these .qrc files, so you are not required to include the listed files in your deployed application.

For more details, see Using .qrc Files (pyside6-rcc).

Qt Modeling Language File .qml

Graphical QML applications are not related to Qt Widgets applications, and that is why the usual setup of QML project is a Python file that loads the QML file, and optionally, elements defined in Python that are exposed to QML to be used.

You can write .qml files by hand, but also you can use tools like the QML Designer that is embedded in Qt Creator. Additionally, there are commercial tools like Qt Design Studio that allow you to load designs from other design applications.

Here you can find an example of how a .qml file looks like. The code will display a lightgray rectangle, with the “Hello World!” message on it.

import QtQuick 2.0

Rectangle {
    id: page
    width: 320;
    height: 480
    color: "lightgray"

    Text {
        id: helloText
        text: "Hello world!"
        y: 30
        anchors.horizontalCenter: page.horizontalCenter
        font.pointSize: 24;
        font.bold: true
    }
}

Qt Creator Python Project File .pyproject

For Qt Creator to load and handle Python based projects, a special file is needed, because C++ based projects could be handle from .qmake or CMakeLists.txt file, which are not used with Python-based projects.

Old versions of Qt Creator, provided a simple format with the .pyqtc extension, which were plain-text files with one-file-per-line:

library/server.py
library/client.py
logger.py
...

There were limitations to this format, and further options that might be added that would not be supported, which was the motivation to create a .pyproject file, which is a JSON-based file where more options could be added. Here is an example of such file:

{
    "files": ["library/server.py", "library/client.py", "logger.py", ...]
}