From 471d6d3d5497d32ccf92745094693f3a1d6cbeb8 Mon Sep 17 00:00:00 2001 From: Leodanis Pozo Ramos Date: Mon, 29 Jun 2026 19:21:55 +0000 Subject: [PATCH] Sample code for: Qt Designer and Python: Build Your GUI Applications Faster Update the sample text editor from PyQt5 to PyQt6 (app.py and the pyuic6-generated main_window_ui.py), add a standard top-level README plus a detailed app README in sample_editor/, and commit the generated module in ruff-formatted form so CI passes without linter-config changes. Co-Authored-By: Claude Opus 4.8 (1M context) --- qt-designer-python/README.md | 31 +------ qt-designer-python/sample_editor/README.md | 29 +++++++ qt-designer-python/sample_editor/app.py | 4 +- .../sample_editor/main_window_ui.py | 82 +++++++++---------- 4 files changed, 74 insertions(+), 72 deletions(-) create mode 100644 qt-designer-python/sample_editor/README.md diff --git a/qt-designer-python/README.md b/qt-designer-python/README.md index 3aa3bdbae4..6827db3913 100644 --- a/qt-designer-python/README.md +++ b/qt-designer-python/README.md @@ -1,30 +1,3 @@ -# Sample Text Editor +# Qt Designer and Python: Build Your GUI Applications Faster -A **sample text editor** that shows how to use Qt Designer to create GUI applications. - -## How to Run this Application - -To run this application, you need to [install `PyQt5`](https://realpython.com/python-pyqt-gui-calculator/#installing-pyqt) on your Python environment. To do that, you can run the following commands in a terminal or command prompt: - -```sh -$ python3 -m venv ./venv -$ source venv/bin/activate -(venv) $ pip install PyQt5 -``` - -Once you have [PyQt](https://www.riverbankcomputing.com/static/Docs/PyQt5/) installed, you can run the application by executing the following command: - -```sh -(venv) $ cd sample_editor/ -(venv) $ python app.py -``` - -This command will launch the application, so you'll be able to experiment with it. - -## About the Author - -Leodanis Pozo Ramos – [@lpozo78](https://twitter.com/lpozo78) – lpozor78@gmail.com - -## License - -The set of icons used in this application are part of the [TurkinOS](https://github.com/llamaret/turkinos-icon) icon theme, which is distributed under the [GPL v3.0 license](https://github.com/llamaret/turkinos-icon/blob/master/LICENSE). See `ui/resources/LICENSE` for details. \ No newline at end of file +This folder provides the code examples for the Real Python tutorial [Qt Designer and Python: Build Your GUI Applications Faster](https://realpython.com/qt-designer-python/) diff --git a/qt-designer-python/sample_editor/README.md b/qt-designer-python/sample_editor/README.md new file mode 100644 index 0000000000..854db7d952 --- /dev/null +++ b/qt-designer-python/sample_editor/README.md @@ -0,0 +1,29 @@ +# Sample Text Editor + +A **sample text editor** that shows how to use Qt Designer to create GUI applications. + +## How to Run this Application + +To run this application, you need to [install `PyQt6`](https://realpython.com/python-pyqt-gui-calculator/#installing-pyqt) on your Python environment. To do that, you can run the following commands in a terminal or command prompt: + +```sh +$ python3 -m venv ./venv +$ source venv/bin/activate +(venv) $ pip install PyQt6 +``` + +Once you have [PyQt](https://www.riverbankcomputing.com/static/Docs/PyQt6/) installed, you can run the application by executing the following command: + +```sh +(venv) $ python app.py +``` + +This command will launch the application, so you'll be able to experiment with it. + +## About the Author + +Leodanis Pozo Ramos – [@lpozo78](https://twitter.com/lpozo78) – lpozor78@gmail.com + +## License + +The set of icons used in this application are part of the [TurkinOS](https://github.com/llamaret/turkinos-icon) icon theme, which is distributed under the [GPL v3.0 license](https://github.com/llamaret/turkinos-icon/blob/master/LICENSE). See `ui/resources/LICENSE.txt` for details. diff --git a/qt-designer-python/sample_editor/app.py b/qt-designer-python/sample_editor/app.py index f37347e8e5..01441197c6 100644 --- a/qt-designer-python/sample_editor/app.py +++ b/qt-designer-python/sample_editor/app.py @@ -1,8 +1,8 @@ import sys from main_window_ui import Ui_MainWindow -from PyQt5.QtWidgets import QApplication, QDialog, QMainWindow, QMessageBox -from PyQt5.uic import loadUi +from PyQt6.QtWidgets import QApplication, QDialog, QMainWindow, QMessageBox +from PyQt6.uic import loadUi class Window(QMainWindow, Ui_MainWindow): diff --git a/qt-designer-python/sample_editor/main_window_ui.py b/qt-designer-python/sample_editor/main_window_ui.py index d62d0457cd..e83ac486f3 100644 --- a/qt-designer-python/sample_editor/main_window_ui.py +++ b/qt-designer-python/sample_editor/main_window_ui.py @@ -1,122 +1,122 @@ -# -*- coding: utf-8 -*- - # Form implementation generated from reading ui file 'ui/main_window.ui' # -# Created by: PyQt5 UI code generator 5.15.1 +# Created by: PyQt6 UI code generator 6.11.0 # -# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# WARNING: Any manual changes made to this file will be lost when pyuic6 is # run again. Do not edit this file unless you know what you are doing. -from PyQt5 import QtCore, QtGui, QtWidgets +from PyQt6 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(413, 299) - self.centralwidget = QtWidgets.QWidget(MainWindow) + self.centralwidget = QtWidgets.QWidget(parent=MainWindow) self.centralwidget.setObjectName("centralwidget") self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget) self.verticalLayout.setContentsMargins(1, 1, 1, 1) self.verticalLayout.setObjectName("verticalLayout") - self.textEdit = QtWidgets.QTextEdit(self.centralwidget) + self.textEdit = QtWidgets.QTextEdit(parent=self.centralwidget) self.textEdit.setObjectName("textEdit") self.verticalLayout.addWidget(self.textEdit) MainWindow.setCentralWidget(self.centralwidget) - self.menubar = QtWidgets.QMenuBar(MainWindow) + self.menubar = QtWidgets.QMenuBar(parent=MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 413, 20)) self.menubar.setObjectName("menubar") - self.menu_File = QtWidgets.QMenu(self.menubar) + self.menu_File = QtWidgets.QMenu(parent=self.menubar) self.menu_File.setObjectName("menu_File") - self.menuOpen_Recent = QtWidgets.QMenu(self.menu_File) + self.menuOpen_Recent = QtWidgets.QMenu(parent=self.menu_File) self.menuOpen_Recent.setObjectName("menuOpen_Recent") - self.menu_Edit = QtWidgets.QMenu(self.menubar) + self.menu_Edit = QtWidgets.QMenu(parent=self.menubar) self.menu_Edit.setObjectName("menu_Edit") - self.menu_Help = QtWidgets.QMenu(self.menubar) + self.menu_Help = QtWidgets.QMenu(parent=self.menubar) self.menu_Help.setObjectName("menu_Help") MainWindow.setMenuBar(self.menubar) - self.statusbar = QtWidgets.QStatusBar(MainWindow) + self.statusbar = QtWidgets.QStatusBar(parent=MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) - self.toolBar = QtWidgets.QToolBar(MainWindow) + self.toolBar = QtWidgets.QToolBar(parent=MainWindow) self.toolBar.setObjectName("toolBar") - MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar) - self.action_New = QtWidgets.QAction(MainWindow) + MainWindow.addToolBar( + QtCore.Qt.ToolBarArea.TopToolBarArea, self.toolBar + ) + self.action_New = QtGui.QAction(parent=MainWindow) icon = QtGui.QIcon() icon.addPixmap( QtGui.QPixmap("ui/resources/file-new.png"), - QtGui.QIcon.Normal, - QtGui.QIcon.Off, + QtGui.QIcon.Mode.Normal, + QtGui.QIcon.State.Off, ) self.action_New.setIcon(icon) self.action_New.setObjectName("action_New") - self.action_Open = QtWidgets.QAction(MainWindow) + self.action_Open = QtGui.QAction(parent=MainWindow) icon1 = QtGui.QIcon() icon1.addPixmap( QtGui.QPixmap("ui/resources/file-open.png"), - QtGui.QIcon.Normal, - QtGui.QIcon.Off, + QtGui.QIcon.Mode.Normal, + QtGui.QIcon.State.Off, ) self.action_Open.setIcon(icon1) self.action_Open.setObjectName("action_Open") - self.action_Save = QtWidgets.QAction(MainWindow) + self.action_Save = QtGui.QAction(parent=MainWindow) icon2 = QtGui.QIcon() icon2.addPixmap( QtGui.QPixmap("ui/resources/file-save.png"), - QtGui.QIcon.Normal, - QtGui.QIcon.Off, + QtGui.QIcon.Mode.Normal, + QtGui.QIcon.State.Off, ) self.action_Save.setIcon(icon2) self.action_Save.setObjectName("action_Save") - self.action_Exit = QtWidgets.QAction(MainWindow) + self.action_Exit = QtGui.QAction(parent=MainWindow) icon3 = QtGui.QIcon() icon3.addPixmap( QtGui.QPixmap("ui/resources/file-exit.png"), - QtGui.QIcon.Normal, - QtGui.QIcon.Off, + QtGui.QIcon.Mode.Normal, + QtGui.QIcon.State.Off, ) self.action_Exit.setIcon(icon3) self.action_Exit.setObjectName("action_Exit") - self.action_Copy = QtWidgets.QAction(MainWindow) + self.action_Copy = QtGui.QAction(parent=MainWindow) icon4 = QtGui.QIcon() icon4.addPixmap( QtGui.QPixmap("ui/resources/edit-copy.png"), - QtGui.QIcon.Normal, - QtGui.QIcon.Off, + QtGui.QIcon.Mode.Normal, + QtGui.QIcon.State.Off, ) self.action_Copy.setIcon(icon4) self.action_Copy.setObjectName("action_Copy") - self.action_Paste = QtWidgets.QAction(MainWindow) + self.action_Paste = QtGui.QAction(parent=MainWindow) icon5 = QtGui.QIcon() icon5.addPixmap( QtGui.QPixmap("ui/resources/edit-paste.png"), - QtGui.QIcon.Normal, - QtGui.QIcon.Off, + QtGui.QIcon.Mode.Normal, + QtGui.QIcon.State.Off, ) self.action_Paste.setIcon(icon5) self.action_Paste.setObjectName("action_Paste") - self.action_Cut = QtWidgets.QAction(MainWindow) + self.action_Cut = QtGui.QAction(parent=MainWindow) icon6 = QtGui.QIcon() icon6.addPixmap( QtGui.QPixmap("ui/resources/edit-cut.png"), - QtGui.QIcon.Normal, - QtGui.QIcon.Off, + QtGui.QIcon.Mode.Normal, + QtGui.QIcon.State.Off, ) self.action_Cut.setIcon(icon6) self.action_Cut.setObjectName("action_Cut") - self.actionOpen_All = QtWidgets.QAction(MainWindow) + self.actionOpen_All = QtGui.QAction(parent=MainWindow) self.actionOpen_All.setObjectName("actionOpen_All") - self.action_About = QtWidgets.QAction(MainWindow) + self.action_About = QtGui.QAction(parent=MainWindow) icon7 = QtGui.QIcon() icon7.addPixmap( QtGui.QPixmap("ui/resources/help-content.png"), - QtGui.QIcon.Normal, - QtGui.QIcon.Off, + QtGui.QIcon.Mode.Normal, + QtGui.QIcon.State.Off, ) self.action_About.setIcon(icon7) self.action_About.setObjectName("action_About") - self.action_Find_Replace = QtWidgets.QAction(MainWindow) + self.action_Find_Replace = QtGui.QAction(parent=MainWindow) self.action_Find_Replace.setObjectName("action_Find_Replace") self.menuOpen_Recent.addAction(self.actionOpen_All) self.menu_File.addAction(self.action_New)