{"id":5320,"date":"2022-10-18T08:42:56","date_gmt":"2022-10-18T08:42:56","guid":{"rendered":"https:\/\/www.pythontutorial.net\/?page_id=5320"},"modified":"2022-10-18T09:23:54","modified_gmt":"2022-10-18T09:23:54","slug":"qt-designer","status":"publish","type":"page","link":"https:\/\/www.pythontutorial.net\/pyqt\/qt-designer\/","title":{"rendered":"Qt Designer"},"content":{"rendered":"\n<p><strong>Summary<\/strong>: in this tutorial, you&#8217;ll learn how to use the Qt Designer tool to design user interfaces for PyQt applications.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id='install-the-pyqt-tools'>Install the PyQt tools <a href=\"#install-the-pyqt-tools\" class=\"anchor\" id=\"install-the-pyqt-tools\" title=\"Anchor for Install the PyQt tools\">#<\/a><\/h2>\n\n\n\n<p>PyQt6 tools are compatible with Python 3.9 at the time of writing this tutorial. Therefore, you need to install Python 3.9 to continue the tutorial.<\/p>\n\n\n\n<p class=\"note\">Note that if you have Python 3.10 or higher, you can install Python 3.9 in a separate directory and use PyQt6 tools. For example, you can install Python 3.9 in the C:\\Python39 directory on Windows.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id='create-a-new-virtual-environment'>Create a new virtual environment <a href=\"#create-a-new-virtual-environment\" class=\"anchor\" id=\"create-a-new-virtual-environment\" title=\"Anchor for Create a new virtual environment\">#<\/a><\/h3>\n\n\n\n<p>First, create a directory to host the PyQt6 projects e.g., D:\\pyqt6<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">mkdir pyqt6<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Second, <a href=\"https:\/\/www.pythontutorial.net\/python-basics\/python-virtual-environments\/\">create a virtual environment<\/a> using Python 3.9 using the <code>venv<\/code> module:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">python -m venv D:\\pyqt6\\pyqt6-env<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\" id='activate-the-virtual-environment'>Activate the virtual environment <a href=\"#activate-the-virtual-environment\" class=\"anchor\" id=\"activate-the-virtual-environment\" title=\"Anchor for Activate the virtual environment\">#<\/a><\/h3>\n\n\n\n<p>First, navigate to the <code>pyqt6-env<\/code> virtual environment directory:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">cd D:\\pyqt6\\pyqt6-env<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Second, navigate to the <code>Scripts<\/code> folder:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">cd Scripts<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Third, activate the virtual environment by executing the activate.bat file:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">activate<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>It&#8217;ll show the following on Windows:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">(pyqt6-env) d:\\pyqt6\\pyqt6-env\\Scripts&gt;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\" id='install-pyqt6-and-its-tools'>Install PyQt6 and its tools <a href=\"#install-pyqt6-and-its-tools\" class=\"anchor\" id=\"install-pyqt6-and-its-tools\" title=\"Anchor for Install PyQt6 and its tools\">#<\/a><\/h3>\n\n\n\n<p>First, execute the following command to install <code>pyqt6<\/code> package in the <code>pyqt6-env<\/code> virtual environment:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">pip install pyqt6<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Second, install the <code>pyqt6-tools<\/code> package that contains the Qt Designer and other related tools:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">pip install pyqt6-tools<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The <code>pyqt-tools<\/code> package will install the Qt Designer in the following location:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">D:\\pyqt6\\pyqt6-env\\Lib\\site-packages\\qt6_applications\\Qt\\bin\\designer.exe<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Third, execute the <code>pyuic6<\/code> command (within the <code>pyqt6-env<\/code> virtual environment) to check the version:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">pyuic6 -V<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>And you&#8217;ll see the following output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-number\">6.1<\/span><span class=\"hljs-number\">.0<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The pyuic6 is a tool for converting a design file (<code>.ui<\/code>) generated by Qt Designer to a Python file (<code>.py<\/code>).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id='launch-the-qt-designer'>Launch the Qt Designer <a href=\"#launch-the-qt-designer\" class=\"anchor\" id=\"launch-the-qt-designer\" title=\"Anchor for Launch the Qt Designer\">#<\/a><\/h2>\n\n\n\n<p>From the Shell, type the <code>designer<\/code> command to launch the Qt Designer:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">(pyqt6-env) d:\\pyqt6\\pyqt6-env\\Scripts&gt;designer<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The Qt Designer will look like this:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"649\" src=\"https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-1024x649.png\" alt=\"Qt Designer\" class=\"wp-image-5322\" srcset=\"https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-1024x649.png 1024w, https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-300x190.png 300w, https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-768x487.png 768w, https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer.png 1446w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id='creating-a-login-form'>Creating a login form <a href=\"#creating-a-login-form\" class=\"anchor\" id=\"creating-a-login-form\" title=\"Anchor for Creating a login form\">#<\/a><\/h2>\n\n\n\n<p>We&#8217;ll create a simple login form using the Qt designer and load it into our Python program.<\/p>\n\n\n\n<p>First, select <code>File > New<\/code> or press <code>Ctrl-N<\/code> keyboard shortcut to open the New Form dialog:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"738\" height=\"603\" src=\"https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-New.png\" alt=\"Qt Designer - New\" class=\"wp-image-5324\" srcset=\"https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-New.png 738w, https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-New-300x245.png 300w\" sizes=\"auto, (max-width: 738px) 100vw, 738px\" \/><\/figure>\n\n\n\n<p>Second, select the <code>Widget<\/code> from the <code>templates\\forms<\/code> and click the <code>Create<\/code> button:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"754\" height=\"648\" src=\"https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-Create-a-Widget.png\" alt=\"Qt Designer - Create a Widget\" class=\"wp-image-5325\" srcset=\"https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-Create-a-Widget.png 754w, https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-Create-a-Widget-300x258.png 300w\" sizes=\"auto, (max-width: 754px) 100vw, 754px\" \/><\/figure>\n\n\n\n<p>It&#8217;ll create a <code>QWidget<\/code> as follows:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"983\" height=\"643\" src=\"https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-Form.png\" alt=\"Qt Designer - Form\" class=\"wp-image-5326\" srcset=\"https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-Form.png 983w, https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-Form-300x196.png 300w, https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-Form-768x502.png 768w\" sizes=\"auto, (max-width: 983px) 100vw, 983px\" \/><\/figure>\n\n\n\n<p>You can set the layout for the widget, and drag and drop widgets from the Widget Box to the form.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id='setting-widget-properties'>Setting widget properties <a href=\"#setting-widget-properties\" class=\"anchor\" id=\"setting-widget-properties\" title=\"Anchor for Setting widget properties\">#<\/a><\/h3>\n\n\n\n<p>In the Property Editor, you can set a name for the widget e.g., <code>login_form<\/code> <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"579\" height=\"374\" src=\"https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-Widget-Properties.png\" alt=\"Qt Designer - Widget Properties\" class=\"wp-image-5327\" srcset=\"https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-Widget-Properties.png 579w, https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-Widget-Properties-300x194.png 300w\" sizes=\"auto, (max-width: 579px) 100vw, 579px\" \/><\/figure>\n\n\n\n<p>and the window title:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"570\" height=\"469\" src=\"https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-Window-Title.png\" alt=\"Qt Designer -Window Title\" class=\"wp-image-5328\" srcset=\"https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-Window-Title.png 570w, https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-Window-Title-300x247.png 300w\" sizes=\"auto, (max-width: 570px) 100vw, 570px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id='adding-widgets-to-the-login-form'>Adding widgets to the login form <a href=\"#adding-widgets-to-the-login-form\" class=\"anchor\" id=\"adding-widgets-to-the-login-form\" title=\"Anchor for Adding widgets to the login form\">#<\/a><\/h3>\n\n\n\n<p>First, add the widgets <code>QLabel<\/code>, <code>QLineEdit<\/code>, and <code>QPushButton<\/code> to the form:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"583\" height=\"293\" src=\"https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-widgets.png\" alt=\"Qt Designer - widgets\" class=\"wp-image-5330\" srcset=\"https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-widgets.png 583w, https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-widgets-300x151.png 300w\" sizes=\"auto, (max-width: 583px) 100vw, 583px\" \/><\/figure>\n\n\n\n<p>The following table lists the fields, their types, and names:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Field<\/th><th>Widget<\/th><th>Object Name<\/th><\/tr><\/thead><tbody><tr><td>Login Window<\/td><td><code>QWidget<\/code><\/td><td><code>login_form<\/code><\/td><\/tr><tr><td>Email Address<\/td><td><code>QLineEdit<\/code><\/td><td><code>email_line_edit<\/code><\/td><\/tr><tr><td>Password<\/td><td><code>QLineEdit<\/code><\/td><td><code>password_line_edit<\/code><\/td><\/tr><tr><td>Login Button<\/td><td><code>QPushButton<\/code><\/td><td><code>btn_login<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Second, set the echo mode of the password field to <code>Password<\/code>:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"574\" height=\"484\" src=\"https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-Password-field.png\" alt=\"Qt Designer - Password field\" class=\"wp-image-5331\" srcset=\"https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-Password-field.png 574w, https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-Password-field-300x253.png 300w\" sizes=\"auto, (max-width: 574px) 100vw, 574px\" \/><\/figure>\n\n\n\n<p>Third, right-click the widget and set its layout to <a href=\"https:\/\/www.pythontutorial.net\/pyqt\/pyqt-qformlayout\/\">Form Layout<\/a>:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"776\" height=\"829\" src=\"https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-Set-Form-Layout.png\" alt=\"Qt Designer - Set Form Layout\" class=\"wp-image-5332\" srcset=\"https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-Set-Form-Layout.png 776w, https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-Set-Form-Layout-281x300.png 281w, https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-Set-Form-Layout-768x820.png 768w\" sizes=\"auto, (max-width: 776px) 100vw, 776px\" \/><\/figure>\n\n\n\n<p>The form will change to the following:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"581\" height=\"294\" src=\"https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-Form-Layout.png\" alt=\"Qt Designer - Form Layout\" class=\"wp-image-5333\" srcset=\"https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-Form-Layout.png 581w, https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-Form-Layout-300x152.png 300w\" sizes=\"auto, (max-width: 581px) 100vw, 581px\" \/><\/figure>\n\n\n\n<p>Fourth, change the size of the <code>Login<\/code> button by setting its Horizontal Size Policy to Fixed:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"572\" height=\"518\" src=\"https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-Change-the-button-size.png\" alt=\"Qt Designer - Change the button size\" class=\"wp-image-5334\" srcset=\"https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-Change-the-button-size.png 572w, https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-Change-the-button-size-300x272.png 300w\" sizes=\"auto, (max-width: 572px) 100vw, 572px\" \/><\/figure>\n\n\n\n<p>Fifth, save the form to the <code>D:\\pyqt6<\/code> directory as <code>login_form.ui<\/code> file.<\/p>\n\n\n\n<p>Sixth, select <code>Form > Preview...<\/code> menu or the keyboard shortcut <code>Ctrl-R<\/code> to preview the form:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"593\" height=\"415\" src=\"https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-Preview.png\" alt=\"Qt Designer - Preview\" class=\"wp-image-5336\" srcset=\"https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-Preview.png 593w, https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-Preview-300x210.png 300w\" sizes=\"auto, (max-width: 593px) 100vw, 593px\" \/><\/figure>\n\n\n\n<p>Finally, close the Qt Designer.<\/p>\n\n\n\n<p>There&#8217;re two ways to use the <code>login_form<\/code>.ui from a Python program:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Convert the .ui file to Python code and use the generated code from the program.<\/li><li>Directly use the .ui file in the program.<\/li><\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id='converting-ui-file-to-python-code'>Converting .ui file to Python code <a href=\"#converting-ui-file-to-python-code\" class=\"anchor\" id=\"converting-ui-file-to-python-code\" title=\"Anchor for Converting .ui file to Python code\">#<\/a><\/h2>\n\n\n\n<p>First, execute the following command to convert the <code>login_form.ui<\/code> file to <code>login_form.py<\/code> file:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-13\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">pyuic6 -o login_form.py login_form.ui<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-13\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"note\">Note that you need to run the <code>pyuic6<\/code> from the pyqt6-env virtual environment.<\/p>\n\n\n\n<p>The <code>pyuic6<\/code> generated the <code>login_form.py<\/code> from the <code>login_form.ui<\/code> file. The <code>login_form.py<\/code> contains the following generated Python code:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-14\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-comment\"># Form implementation generated from reading ui file 'login_form.ui'<\/span>\n<span class=\"hljs-comment\">#<\/span>\n<span class=\"hljs-comment\"># Created by: PyQt6 UI code generator 6.1.0<\/span>\n<span class=\"hljs-comment\">#<\/span>\n<span class=\"hljs-comment\"># WARNING: Any manual changes made to this file will be lost when pyuic6 is<\/span>\n<span class=\"hljs-comment\"># run again.  Do not edit this file unless you know what you are doing.<\/span>\n\n\n<span class=\"hljs-keyword\">from<\/span> PyQt6 <span class=\"hljs-keyword\">import<\/span> QtCore, QtGui, QtWidgets\n\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Ui_login_form<\/span><span class=\"hljs-params\">(object)<\/span>:<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">setupUi<\/span><span class=\"hljs-params\">(self, login_form)<\/span>:<\/span>\n        login_form.setObjectName(<span class=\"hljs-string\">\"login_form\"<\/span>)\n        login_form.resize(<span class=\"hljs-number\">269<\/span>, <span class=\"hljs-number\">108<\/span>)\n        self.formLayout = QtWidgets.QFormLayout(login_form)\n        self.formLayout.setObjectName(<span class=\"hljs-string\">\"formLayout\"<\/span>)\n        self.label = QtWidgets.QLabel(login_form)\n        self.label.setObjectName(<span class=\"hljs-string\">\"label\"<\/span>)\n        self.formLayout.setWidget(<span class=\"hljs-number\">0<\/span>, QtWidgets.QFormLayout.ItemRole.LabelRole, self.label)\n        self.email_line_edit = QtWidgets.QLineEdit(login_form)\n        self.email_line_edit.setObjectName(<span class=\"hljs-string\">\"email_line_edit\"<\/span>)\n        self.formLayout.setWidget(<span class=\"hljs-number\">0<\/span>, QtWidgets.QFormLayout.ItemRole.FieldRole, self.email_line_edit)\n        self.label_2 = QtWidgets.QLabel(login_form)\n        self.label_2.setObjectName(<span class=\"hljs-string\">\"label_2\"<\/span>)\n        self.formLayout.setWidget(<span class=\"hljs-number\">1<\/span>, QtWidgets.QFormLayout.ItemRole.LabelRole, self.label_2)\n        self.password_line_edit = QtWidgets.QLineEdit(login_form)\n        self.password_line_edit.setEchoMode(QtWidgets.QLineEdit.EchoMode.Password)\n        self.password_line_edit.setObjectName(<span class=\"hljs-string\">\"password_line_edit\"<\/span>)\n        self.formLayout.setWidget(<span class=\"hljs-number\">1<\/span>, QtWidgets.QFormLayout.ItemRole.FieldRole, self.password_line_edit)\n        self.btn_login = QtWidgets.QPushButton(login_form)\n        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)\n        sizePolicy.setHorizontalStretch(<span class=\"hljs-number\">0<\/span>)\n        sizePolicy.setVerticalStretch(<span class=\"hljs-number\">0<\/span>)\n        sizePolicy.setHeightForWidth(self.btn_login.sizePolicy().hasHeightForWidth())\n        self.btn_login.setSizePolicy(sizePolicy)\n        self.btn_login.setObjectName(<span class=\"hljs-string\">\"btn_login\"<\/span>)\n        self.formLayout.setWidget(<span class=\"hljs-number\">2<\/span>, QtWidgets.QFormLayout.ItemRole.FieldRole, self.btn_login)\n\n        self.retranslateUi(login_form)\n        QtCore.QMetaObject.connectSlotsByName(login_form)\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">retranslateUi<\/span><span class=\"hljs-params\">(self, login_form)<\/span>:<\/span>\n        _translate = QtCore.QCoreApplication.translate\n        login_form.setWindowTitle(_translate(<span class=\"hljs-string\">\"login_form\"<\/span>, <span class=\"hljs-string\">\"Login\"<\/span>))\n        self.label.setText(_translate(<span class=\"hljs-string\">\"login_form\"<\/span>, <span class=\"hljs-string\">\"Email Address\"<\/span>))\n        self.label_2.setText(_translate(<span class=\"hljs-string\">\"login_form\"<\/span>, <span class=\"hljs-string\">\"Password\"<\/span>))\n        self.btn_login.setText(_translate(<span class=\"hljs-string\">\"login_form\"<\/span>, <span class=\"hljs-string\">\"Login\"<\/span>))<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-14\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"warning\">It&#8217;s important to note that you should never manually change the login_form.py file. Because all your manual adjustments will be lost if you edit the <code>login_form.ui<\/code> in the Qt Designer and regenerate the <code>login_form.py<\/code> again.<\/p>\n\n\n\n<p>Second, create the <code>login.py<\/code> file and import the <code>login_ui.py<\/code> file:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-15\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-keyword\">import<\/span> sys\n<span class=\"hljs-keyword\">from<\/span> PyQt6.QtWidgets <span class=\"hljs-keyword\">import<\/span> QApplication, QWidget\n<span class=\"hljs-keyword\">from<\/span> login_form <span class=\"hljs-keyword\">import<\/span> Ui_login_form\n\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Login<\/span><span class=\"hljs-params\">(QWidget)<\/span>:<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__init__<\/span><span class=\"hljs-params\">(self)<\/span>:<\/span>\n        super().__init__()\n\n        <span class=\"hljs-comment\"># use the Ui_login_form<\/span>\n        self.ui = Ui_login_form()       \n        self.ui.setupUi(self)       \n        \n        <span class=\"hljs-comment\"># show the login window<\/span>\n        self.show()\n    \n\n<span class=\"hljs-keyword\">if<\/span> __name__ == <span class=\"hljs-string\">'__main__'<\/span>:\n    app = QApplication(sys.argv)\n    login_window = Login()\n    sys.exit(app.exec())<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-15\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>How it works.<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Import <code>Ui_login_form<\/code> class from the <code>login_form.py<\/code> file<\/li><li>Create a new instance of the <code>Ui_login_form<\/code> and call the <code>setupUi()<\/code> method to set up the user interfaces.<\/li><\/ol>\n\n\n\n<p>Third, execute the <code>login.py<\/code> file:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-16\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">python login.py<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-16\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>It&#8217;ll show the login window:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"406\" height=\"207\" src=\"https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-Login-Window.png\" alt=\"Qt Designer - Login Window\" class=\"wp-image-5340\" srcset=\"https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-Login-Window.png 406w, https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/10\/Qt-Designer-Login-Window-300x153.png 300w\" sizes=\"auto, (max-width: 406px) 100vw, 406px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id='referencing-child-widgets'>Referencing child widgets <a href=\"#referencing-child-widgets\" class=\"anchor\" id=\"referencing-child-widgets\" title=\"Anchor for Referencing child widgets\">#<\/a><\/h3>\n\n\n\n<p>To use the child widgets of  <code>Ui_login_form<\/code> widget, you reference their names using the <code>self.ui<\/code> variable. <\/p>\n\n\n\n<p>For example, you can add a simple authentication when the user enters an email address and password and click the Login button as follows:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-17\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-keyword\">import<\/span> sys\n<span class=\"hljs-keyword\">from<\/span> PyQt6.QtWidgets <span class=\"hljs-keyword\">import<\/span> QApplication, QWidget, QMessageBox\n<span class=\"hljs-keyword\">from<\/span> login_form <span class=\"hljs-keyword\">import<\/span> Ui_login_form\n\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Login<\/span><span class=\"hljs-params\">(QWidget)<\/span>:<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__init__<\/span><span class=\"hljs-params\">(self)<\/span>:<\/span>\n        super().__init__()\n\n        <span class=\"hljs-comment\"># use the Ui_login_form<\/span>\n        self.ui = Ui_login_form()       \n        self.ui.setupUi(self)       \n\n        <span class=\"hljs-comment\"># authenticate when the login button is clicked<\/span>\n        self.ui.btn_login.clicked.connect(self.authenticate)\n        \n        <span class=\"hljs-comment\"># show the login window<\/span>\n        self.show()\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">authenticate<\/span><span class=\"hljs-params\">(self)<\/span>:<\/span>\n        email = self.ui.email_line_edit.text()\n        password = self.ui.password_line_edit.text()\n\n        <span class=\"hljs-keyword\">if<\/span> email == <span class=\"hljs-string\">'john@test.com'<\/span> <span class=\"hljs-keyword\">and<\/span> password == <span class=\"hljs-string\">'123456'<\/span>:\n            QMessageBox.information(self, <span class=\"hljs-string\">'Success'<\/span>,<span class=\"hljs-string\">\"You're logged in!\"<\/span>)\n        <span class=\"hljs-keyword\">else<\/span>:\n            QMessageBox.critical(self, <span class=\"hljs-string\">'Error'<\/span>,<span class=\"hljs-string\">\"Invalid email or password.\"<\/span>)\n    \n\n<span class=\"hljs-keyword\">if<\/span> __name__ == <span class=\"hljs-string\">'__main__'<\/span>:\n    app = QApplication(sys.argv)\n    login_window = Login()\n    sys.exit(app.exec())<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-17\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>How it works.<\/p>\n\n\n\n<p>First, connect the clicked signal of the button to the authenticate method. Notice that we reference the <code>btn_login<\/code> button via the <code>self.ui<\/code> variable:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-18\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">self.ui.btn_login.clicked.connect(self.authenticate)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-18\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Second, define the <code>authenticate()<\/code> method that gets values from the <code>email_line_edit<\/code> and <code>password_line_edit<\/code> and perform a simple check of these values against hard-coded values:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-19\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">authenticate<\/span><span class=\"hljs-params\">(self)<\/span>:<\/span>\n    email = self.ui.email_line_edit.text()\n    password = self.ui.password_line_edit.text()\n\n    <span class=\"hljs-keyword\">if<\/span> email == <span class=\"hljs-string\">'john@test.com'<\/span> <span class=\"hljs-keyword\">and<\/span> password == <span class=\"hljs-string\">'123456'<\/span>:\n        QMessageBox.information(self, <span class=\"hljs-string\">'Success'<\/span>,<span class=\"hljs-string\">\"You're logged in!\"<\/span>)\n    <span class=\"hljs-keyword\">else<\/span>:\n        QMessageBox.critical(self, <span class=\"hljs-string\">'Error'<\/span>,<span class=\"hljs-string\">\"Invalid email or password.\"<\/span>)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-19\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"notice\">Security Notice: Never do this in real applications.<\/p>\n\n\n\n<p>Besides creating an instance of the <code>Ui_login_form<\/code> inside the login window, you can inherit the <code>Ui_login_form<\/code> window using <a href=\"https:\/\/www.pythontutorial.net\/python-oop\/python-multiple-inheritance\/\">multiple inheritances<\/a> and directly reference the child widgets like this:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-20\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-keyword\">import<\/span> sys\n<span class=\"hljs-keyword\">from<\/span> PyQt6.QtWidgets <span class=\"hljs-keyword\">import<\/span> QApplication, QWidget, QMessageBox\n<span class=\"hljs-keyword\">from<\/span> login_form <span class=\"hljs-keyword\">import<\/span> Ui_login_form\n\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Login<\/span><span class=\"hljs-params\">(QWidget,Ui_login_form)<\/span>:<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__init__<\/span><span class=\"hljs-params\">(self)<\/span>:<\/span>\n        super().__init__()\n\n        <span class=\"hljs-comment\"># setup the UI<\/span>\n        self.setupUi(self)       \n\n        <span class=\"hljs-comment\"># authenticate when the login button is clicked<\/span>\n        self.btn_login.clicked.connect(self.authenticate)\n        \n        <span class=\"hljs-comment\"># show the login window<\/span>\n        self.show()\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">authenticate<\/span><span class=\"hljs-params\">(self)<\/span>:<\/span>\n        email = self.email_line_edit.text()\n        password = self.password_line_edit.text()\n\n        <span class=\"hljs-keyword\">if<\/span> email == <span class=\"hljs-string\">'john@test.com'<\/span> <span class=\"hljs-keyword\">and<\/span> password == <span class=\"hljs-string\">'123456'<\/span>:\n            QMessageBox.information(self, <span class=\"hljs-string\">'Success'<\/span>,<span class=\"hljs-string\">\"You're logged in!\"<\/span>)\n        <span class=\"hljs-keyword\">else<\/span>:\n            QMessageBox.critical(self, <span class=\"hljs-string\">'Error'<\/span>,<span class=\"hljs-string\">\"Invalid email or password.\"<\/span>)\n    \n\n<span class=\"hljs-keyword\">if<\/span> __name__ == <span class=\"hljs-string\">'__main__'<\/span>:\n    app = QApplication(sys.argv)\n    login_window = Login()\n    sys.exit(app.exec())<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-20\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\" id='using-ui-file-directly'>Using .ui file directly <a href=\"#using-ui-file-directly\" class=\"anchor\" id=\"using-ui-file-directly\" title=\"Anchor for Using .ui file directly\">#<\/a><\/h2>\n\n\n\n<p>Another way to use the design generated by the Qt Designer is to load the <code>.ui<\/code> file directly using the <code>loadUi()<\/code> function of the <code>uic<\/code> module:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-21\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-keyword\">from<\/span> PyQt6.QtWidgets <span class=\"hljs-keyword\">import<\/span> QApplication, QWidget, QMessageBox\n<span class=\"hljs-keyword\">from<\/span> PyQt6 <span class=\"hljs-keyword\">import<\/span> uic\n<span class=\"hljs-keyword\">import<\/span> sys\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Login<\/span><span class=\"hljs-params\">(QWidget)<\/span>:<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__init__<\/span><span class=\"hljs-params\">(self)<\/span>:<\/span>\n        super().__init__()\n        self.ui = uic.loadUi(<span class=\"hljs-string\">'login_form.ui'<\/span>, self)\n\n        <span class=\"hljs-comment\"># authenticate when the login button is clicked<\/span>\n        self.ui.btn_login.clicked.connect(self.authenticate)\n\n        self.show()\n    \n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">authenticate<\/span><span class=\"hljs-params\">(self)<\/span>:<\/span>\n        email = self.email_line_edit.text()\n        password = self.password_line_edit.text()\n\n        <span class=\"hljs-keyword\">if<\/span> email == <span class=\"hljs-string\">'john@test.com'<\/span> <span class=\"hljs-keyword\">and<\/span> password == <span class=\"hljs-string\">'123456'<\/span>:\n            QMessageBox.information(self, <span class=\"hljs-string\">'Success'<\/span>,<span class=\"hljs-string\">\"You're logged in!\"<\/span>)\n        <span class=\"hljs-keyword\">else<\/span>:\n            QMessageBox.critical(self, <span class=\"hljs-string\">'Error'<\/span>,<span class=\"hljs-string\">\"Invalid email or password.\"<\/span>)\n\n<span class=\"hljs-keyword\">if<\/span> __name__ == <span class=\"hljs-string\">'__main__'<\/span>:\n    app = QApplication(sys.argv)\n    login_window = Login()\n    sys.exit(app.exec())<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-21\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The <code>loadUi()<\/code> function returns an instance of the <code>QWidget<\/code> and you can reference the child widgets via the <code>self.ui<\/code> variable.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id='when-you-should-use-qt-designer'>When you should use Qt Designer <a href=\"#when-you-should-use-qt-designer\" class=\"anchor\" id=\"when-you-should-use-qt-designer\" title=\"Anchor for When you should use Qt Designer\">#<\/a><\/h2>\n\n\n\n<p>The .ui file generated by the Qt designer creates an abstraction layer between the available widget and the code that consumes it.<\/p>\n\n\n\n<p>Therefore, if you are starting out with PyQt, you should code the <code>UI<\/code> manually instead of using Qt Designer. By doing this, you know exactly what widgets are available in the application.<\/p>\n\n\n\n<p>However, if you&#8217;re familiar with PyQt and work on a large application, you should use Qt Designer to create a good design and improve productivity.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id='summary'>Summary <a href=\"#summary\" class=\"anchor\" id=\"summary\" title=\"Anchor for Summary\">#<\/a><\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Use Qt Designer to design user interfaces for large applications.<\/li><li>Use the <code>pyuic6<\/code> tool to convert a .ui file into a Python source code file.<\/li><li>Use <code>loadUi()<\/code> function of the <code>uic<\/code> module to load the <code>.ui<\/code> file directly.<\/li><\/ul>\n<div class=\"helpful-block-content\" data-title=\"\">\n\t<header>\n\t\t<div class=\"wth-question\">Was this tutorial helpful ?<\/div>\n\t\t<div class=\"wth-thumbs\">\n\t\t\t<button\n\t\t\t\tdata-post=\"5320\"\n\t\t\t\tdata-post-url=\"https:\/\/www.pythontutorial.net\/pyqt\/qt-designer\/\"\n\t\t\t\tdata-post-title=\"Qt Designer\"\n\t\t\t\tdata-response=\"1\"\n\t\t\t\tclass=\"wth-btn-rounded wth-yes-btn\"\n\t\t\t>\n\t\t\t\t<svg\n\t\t\t\t\txmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\tclass=\"feather feather-thumbs-up block w-full h-full\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3\"\n\t\t\t\t\t><\/path>\n\t\t\t\t<\/svg>\n\t\t\t\t<span class=\"sr-only\"> Yes <\/span>\n\t\t\t<\/button>\n\n\t\t\t<button\n\t\t\t\tdata-response=\"0\"\n\t\t\t\tdata-post=\"5320\"\n\t\t\t\tdata-post-url=\"https:\/\/www.pythontutorial.net\/pyqt\/qt-designer\/\"\n\t\t\t\tdata-post-title=\"Qt Designer\"\n\t\t\t\tclass=\"wth-btn-rounded wth-no-btn\"\n\t\t\t>\n\t\t\t\t<svg\n\t\t\t\t\txmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3zm7-13h2.67A2.31 2.31 0 0 1 22 4v7a2.31 2.31 0 0 1-2.33 2H17\"\n\t\t\t\t\t><\/path>\n\t\t\t\t<\/svg>\n\t\t\t\t<span class=\"sr-only\"> No <\/span>\n\t\t\t<\/button>\n\t\t<\/div>\n\t<\/header>\n\n\t<div class=\"wth-form hidden\">\n\t\t<div class=\"wth-form-wrapper\">\n\t\t\t<div class=\"wth-title\"><\/div>\n\t\t\t<textarea class=\"wth-message\"><\/textarea>\n\t\t\t<input type=\"button\" name=\"wth-submit\" class=\"wth-btn wth-btn-submit\" id=\"wth-submit\" \/>\n\t\t\t<input type=\"button\" class=\"wth-btn wth-btn-cancel\" value=\"Cancel\" \/>\n\t\t<\/div>\n\t<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Summary: in this tutorial, you&#8217;ll learn how to use the Qt Designer tool to design user interfaces for PyQt applications. Install the PyQt tools # PyQt6 tools are compatible with Python 3.9 at the time of writing this tutorial. Therefore, you need to install Python 3.9 to continue the tutorial. Note that if you have [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":4862,"menu_order":33,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-5320","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/pages\/5320","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/comments?post=5320"}],"version-history":[{"count":0,"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/pages\/5320\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/pages\/4862"}],"wp:attachment":[{"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/media?parent=5320"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}