How to install pyqt5 on windows

When I try installing the PyQt5 on Windows using the command python configure.py I get this error: Error: Make sure you have a working Qt qmake on your PATH. I got the pyQt5 from PyQt5 Downloa...

First try this in your Windows cmd window:

pip3 install pyqt5

If that is successful, it will look something like this:

C:WindowsSystem32>pip3 install pyqt5
Collecting pyqt5
  Downloading PyQt5-5.9-5.9.1-cp35.cp36.cp37-none-win_amd64.whl (77.2MB)
    100% |################################| 77.2MB 13kB/s
Collecting sip<4.20,>=4.19.3 (from pyqt5)
  Downloading sip-4.19.3-cp35-none-win_amd64.whl (49kB)
    100% |################################| 51kB 984kB/s
Installing collected packages: sip, pyqt5
Successfully installed pyqt5-5.9 sip-4.19.3

If that did not work, you might try this link from SourceForge.

PyQt5 .exe installers for Windows

How to find the installer that’s right for you?

First, determine what version of Python you have and whether you have 32-bit or 64-bit Python.
Next, open one of the directories. I’m on Python 3.5 64-bit so I’m looking for a .exe with those specs. When you open a directory on SourceForge, you will see some directories with ONLY .zip or .tar.gz. That’s not what you’re looking for. A good indication of which directory you should click is given by the «Downloads/Week» column.
I’ll open the PyQt-5.6 directory in my case.

Here we notice some .exe files:

PyQt-5.6
|_PyQt5-5.6-gpl-Py3.5-Qt5.6.0-x32-2.exe
|_PyQt5-5.6-gpl-Py3.5-Qt5.6.0-x64-2.exe
|_PyQt5_gpl-5.6.zip
|_PyQt5_gpl-5.6.tar.gz

I know these are Python 3.5 by Py3.5 in the file name. I am also looking for the 64-bit version so I’ll download PyQt5-5.6-gpl-Py3.5-Qt5.6.0-x64-2.exe. Final answer!

Note: if you try to install a version that’s not compatible with your system, a dialog box will appear immediately after running the .exe. That’s an indication that you’ve chosen the wrong one. I’m not trying to sound like a dbag… I did that several times!

To test a successful install, in your Python interpreter, try to import:

from PyQt5 import QtCore, QtGui, QtWidgets

PyQt is often not installed by default. The PyQt module can be used to create desktop applications with Python. In this article you’ll learn how to install the PyQt module.

Desktop applications made with PyQt are cross platform, they will work on Microsoft Windows, Apple Mac OS X and Linux computers (including Raspberry Pi).

Related Course: Create GUI Apps with Python PyQt5

How to install PyQt5 on Windows?

To install PyQt on Windows there are a few steps you need to take.
First use the installer from the qt-project website, from qt to install PyQt.

Next you want to install a Python version 3.3 or newer. Check the box to add all of the PyQt5 extras. It’s not necessary to compile everything from source, you can install all the required packages with the installer.

On Python >= 3.6, you can also try this command:

1
pip install pyqt5

It should work without problems.

How to install PyQt5 on Mac OS X?

On Apple Mac OS X installation is a bit simpler. The first step to take is to install the Mac OS X binary. This installs the PyQt GUI library.

But to use it from Python, you also need Python module. This is where the tool brew comes in.
You can use brew to install pyqt (in the terminal):

1
brew install pyqt

How to install PyQt5 on Linux?

Python is often installed by default on Linux (in nearly all of the distributions including Ubuntu). But you want to make sure to use Python 3, because of all the features and ease of use. You can verify that you have the newest Python version with the command:

1
python --version

On Ubuntu Linux they sometimes include two versions of python, python3 and python. In that case use Python 3.

Once you have Python ready, the next step is to install PyQt.

This isn’t hard to do if you have some Linux experience. You can install PyQt your software package manager. Which package manager to use depends on which Linux distribution you are using.

On Ubuntu Linux / Debian Linux you can use the command:

1
sudo apt-get install python3-pyqt5

For CentOS 7 use the command:

1
yum install qt5-qtbase-devel

For RPM-based systems (Redhat-based)

1
yum install PyQt5

If you are new to Python PyQt, then I highly recommend this book.

PyQt-How-to-install-pyQt5-on-Windows-10

How to install pyQt5 on Windows 10
How to install pyQt5 on Windows 10

Step1:

Download and install latest python exe from https://www.python.org/downloads/

Step2:

Update pip version if any update available using below command

python -m pip install —upgrade pip

Example:
C:Users<username>AppDataLocalProgramsPythonPython38-32Scripts>python -m pip install —upgrade pip

Step3:

Install PyQt5 using below command — recommended methoed
C:Users<username>AppDataLocalProgramsPythonPython38-32Scripts>pip.exe install pyQt5

(or)

Download pyQt5 whl(wheel) file from https://pypi.org/project/PyQt5
Install whl(wheel) file using below command

C:Users<username>AppDataLocalProgramsPythonPython38-32Scripts>pip.exe install D:SoftwaresPyQt5-5.14.1-5.14.0-cp35.cp36.cp37.cp38-none-win_amd64.whl

Python (programming language):(https://en.wikipedia.org/wiki/Python_(programming_language))

Python is an interpreted, high-level, general-purpose programming language. Created by Guido van Rossum and first released in 1991,
Python’s design philosophy emphasizes code readability with its notable use of significant whitespace. Its language constructs and
object-oriented approach aim to help programmers write clear, logical code for small and large-scale projects.

Python is dynamically typed and garbage-collected. It supports multiple programming paradigms, including procedural, object-oriented,
and functional programming. Python is often described as a «batteries included» language due to its comprehensive standard library.

Python was conceived in the late 1980s as a successor to the ABC language. Python 2.0, released in 2000, introduced features like list
comprehensions and a garbage collection system capable of collecting reference cycles. Python 3.0, released in 2008, was a major revision of the language that is not completely backward-compatible, and much Python 2 code does not run unmodified on Python 3.

The Python 2 language, i.e. Python 2.7.x, was officially discontinued on January 1, 2020 (first planned for 2015) after which security
patches and other improvements will not be released for it. With Python 2’s end-of-life, only Python 3.5.x[32] and later are supported.

Python interpreters are available for many operating systems. A global community of programmers develops and maintains CPython, an open
source reference implementation. A non-profit organization, the Python Software Foundation, manages and directs resources for Python and CPython development

pip (package manager):

pip is a de facto standard package-management system used to install and manage software packages written in Python. Many packages
can be found in the default source for packages and their dependencies — Python Package Index (PyPI).

Most distributions of Python come with pip preinstalled. Python 2.7.9 and later (on the python2 series), and Python 3.4 and later
include pip (pip3 for Python 3) by default.

pip is a recursive acronym for «Pip Installs Packages».

Command-line interface

An output of pip install virtualenv
One major advantage of pip is the ease of its command-line interface, which makes installing Python software packages as easy as issuing
a command:

pip install some-package-name

Users can also easily remove the package:

pip uninstall some-package-name

Most importantly pip has a feature to manage full lists of packages and corresponding version numbers, possible through a «requirements» file.[5] This permits the efficient re-creation of an entire group of packages in a separate environment (e.g. another computer) or virtual environment. This can be achieved with a properly formatted file and the following command[8], where requirements.txt is the name of the file:

pip install -r requirements.txt

Install some package for a specific version python, where ${version} is replaced for 2, 3, 3.4, etc.:

pip${version} install some-package-name

pip list -> it will display install packages
pip show -> it will inoformation about installed packages like installation path

PyQt:(https://en.wikipedia.org/wiki/PyQt)

PyQt is a Python binding of the cross-platform GUI toolkit Qt, implemented as a Python plug-in. PyQt is free software developed by the
British firm Riverbank Computing. It is available under similar terms to Qt versions older than 4.5; this means a variety of licenses
including GNU General Public License (GPL) and commercial license, but not the GNU Lesser General Public License (LGPL).
PyQt supports Microsoft Windows as well as various flavours of UNIX, including Linux and MacOS (or Darwin).

PyQt implements around 440 classes and over 6,000 functions and methods including:

a substantial set of GUI widgets
classes for accessing SQL databases (ODBC, MySQL, PostgreSQL, Oracle, SQLite)
QScintilla, Scintilla-based rich text editor widget
data aware widgets that are automatically populated from a database
an XML parser
SVG support
classes for embedding ActiveX controls on Windows (only in commercial version)
To automatically generate these bindings, Phil Thompson developed the tool SIP, which is also used in other projects.

In August 2009, Nokia, the then owners of the Qt toolkit, released PySide, providing similar functionality, but under the LGPL,
after failing to reach an agreement with Riverbank Computing to change its licensing terms to include LGPL as an alternative license.

What is SIP?

One of the features of Python that makes it so powerful is the ability to take existing libraries, written in C or C++, and make them available as Python extension modules. Such extension modules are often called bindings for the library.

SIP is a collection of tools that makes it very easy to create Python bindings for C and C++ libraries. It was originally developed in 1998 to create PyQt, the Python bindings for the Qt toolkit, but can be used to create bindings for any C or C++ library. For example it is also used to generate wxPython, the Python bindings for wxWidgets.

SIP comprises a set of build tools and a sip module. The build tools process a set of specification files and generates C or C++ code which is then compiled to create the bindings extension module. Several extension modules may be installed in the same Python package. Extension modules can be built so that they are are independent of the version of Python being used. In other words a wheel created from them can be installed with any version of Python starting with v3.5.

The specification files contain a description of the interface of the C or C++ library, i.e. the classes, methods, functions and variables. The format of a specification file is almost identical to a C or C++ header file, so much so that the easiest way of creating a specification file is to edit a copy of the corresponding header file.

The sip module provides support functions to the automatically generated code. The sip module is installed as part of the same Python package as the generated extension modules. Unlike the extension modules the sip module is specific to a particular version of Python (e.g. v3.5, v3.6, v3.7, v3.8).

SIP makes it easy to exploit existing C or C++ libraries in a productive interpretive programming environment. SIP also makes it easy to take a Python application (maybe a prototype) and selectively implement parts of the application (maybe for performance reasons) in C or C++.

Project description

Qt is set of cross-platform C++ libraries that implement high-level APIs for
accessing many aspects of modern desktop and mobile systems. These include
location and positioning services, multimedia, NFC and Bluetooth connectivity,
a Chromium based web browser, as well as traditional UI development.

PyQt5 is a comprehensive set of Python bindings for Qt v5. It is implemented
as more than 35 extension modules and enables Python to be used as an
alternative application development language to C++ on all supported platforms
including iOS and Android.

PyQt5 may also be embedded in C++ based applications to allow users of those
applications to configure or enhance the functionality of those applications.

Author

PyQt5 is copyright (c) Riverbank Computing Limited. Its homepage is
https://www.riverbankcomputing.com/software/pyqt/.

Support may be obtained from the PyQt mailing list at
https://www.riverbankcomputing.com/mailman/listinfo/pyqt/.

License

PyQt5 is released under the GPL v3 license and under a commercial license that
allows for the development of proprietary applications.

Documentation

The documentation for the latest release can be found
here.

Installation

The GPL version of PyQt5 can be installed from PyPI:

pip install PyQt5

pip will also build and install the bindings from the sdist package but
Qt’s qmake tool must be on PATH.

The sip-install tool will also install the bindings from the sdist package
but will allow you to configure many aspects of the installation.

Download files

Download the file for your platform. If you’re not sure which to choose, learn more about installing packages.

Source Distribution

Built Distributions

Improve Article

Save Article

  • Read
  • Discuss
  • Improve Article

    Save Article

    In this article, we will be looking at the stepwise procedure to install the PyQt for python in Windows. PyQt is a Python binding of the cross-platform GUI toolkit Qt, implemented as a Python plug-in. PyQt is free software developed by the British firm Riverbank Computing. 

    Features of PyQt:

    There are more than six hundred classes covering a range of features such as:

    • Graphical User Interfaces
    • SQL Databases
    • Web toolkits
    • XML processing
    • Networking

    Installing PyQt for Python on Windows:

    Follow the below steps to install PyQt for python on Windows:

    Step 1:Verify if python is installed on your system.

    Here, the user can simply run the below command in the command prompt or the power shell of the windows to verify if the python is already installed in the system or not. If python is already installed in the system the output of the command will be the running version of python and if not installed it will produce an error. In case if python is not installed the user can refer to How to Install Python.

    Command to check if python is already installed:

    python --version

    Output:

    Check python version

    Step 2:Verify that PyQt is not installed before:

    In this, the user has to simply type the below command to verify if the PyQt is not installed before, if installed the user has no need to follow the below steps mentioned.

    Command:

    pip list

    Output:

    list all packages installed

    Step 3:Install the PyQt:

    Here, it is the final step to install the PyQt in python just the user needs to type the below-mentioned article, the PyQt5 will be successfully installed in the system, and further by repeating step-2 the user can verify if the PyQt is installed.

    Command:

     pip install PyQt5

    Output:

    installing pyqt on windows

    At this point, you have successfully installed PyQt for python on Windows.

    PyQt5 является одним из наиболее часто используемых модулей для создания GUI приложений в Python, и это связанно с его простотой, о которой вы узнаете далее.

    Еще одна замечательная особенность, которая вдохновляет разработчиков пользоваться PyQt5 – это PyQt5 Designer, благодаря которому можно создавать сложные GUI приложения достаточно быстро. Вам нужно только перетаскивать свои виджеты для создания собственной формы. У нас есть готовый сборник 54 уроков по другому фреймворку wxPython.

    • Создаем простой калькулятор в PyQt5
    • Создаем игру Сапёр на PyQt5
    • История курса рубля на PyQt5 + XML от ЦБ РФ

    Другие фреймворки

    • wxPython
    • Tkinter
    • PyCairo

    В данном руководстве по PyQt5, я буду использовать Python 3.6 на Ubuntu и предположение, что вы уже имеете базовое представление о Python.

    Есть вопросы по Python?

    На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!

    Telegram Чат & Канал

    Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!

    Паблик VK

    Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!

    Звучит замечательно! Начнем с установки PyQt5, и затем перейдем к тому, как разрабатывать GUI приложение с примерами.

    Краткое содержание

    • 1 Установка PyQt5
    • 1.1 Установка PyQt5 через pip
    • 1.2 Установка PyQt5 из исходников на Linux
    • 1.3 Установка PyQt5 из исходников на Windows
    • 2 Устанавливаем PyQt5 Designer
    • 2.1 Где находится дизайнер PyQt5?
    • 3 Как использовать дизайнер PyQt5
    • 4 Разница между QDialog, QMainWindow, и QWidget
    • 5 Загрузка .ui против конвертации .ui в .py
    • 5.1 Загрузка файла .ui в ваш код Python
    • 5.2 Конвертация файла .ui в .py file при помощи pyuic5
    • 6 Виджет QLabel
    • 6.1 Меняем шрифт QLabel
    • 6.2 Меняем размер QLabel
    • 6.3 Меняем текст в QLabel
    • 7 Виджет QLineEdit
    • 7.1 Метод setStyleSheet()
    • 8 Виджет QPushButton
    • 9 Визуальный редактор signal/slot
    • 10 Как испускать сигналы в PyQt5
    • 10.1 Как использовать сигнал в PyQt5
    • 10.2 Переопределение сигнала (события) в PyQt5
    • 11 Виджет QComboBox
    • 11.1 Получаем все элементы из QComboBox
    • 11.2 Выбор одного элемента из QCombobox
    • 12 QTableWidget
    • 12.1 Очистка содержимого QTableWidget
    • 12.2 Заполнение QTableWidget из кода
    • 12.3 Делаем QTableWidget нередактируемым (только для чтения)
    • 12.4 Заголовок для столбцов в QTableWidget
    • 12.5 Как сортировать QTableWidget
    • 12.6 Добавляем QComboBox в QTableWidget
    • 12.7 QProgressBar в QTableWidget
    • 13 Компиляция Python приложения

    Установка PyQt5

    Существует две версии PyQt5: коммерческая и бесплатная версия GPL, которой мы будем пользоваться в этом руководстве.

    Есть два способа установки PyQt5:

    • Установка PyQt5 через pip
    • Установка PyQt5 из исходников на Linux

    Установка PyQt5 через pip

    Чтобы установить PyQt5 при помощи pip, выполните следующую команду:

    Чтобы убедиться в том, что установка прошла успешно, запустите следующий код:

    Если не возникло ни одной ошибки, это значит, что вы успешно установили PyQt5. В случае, если ошибки возникли, возможно это связанно с тем, что вы используете версию Python, которая не поддерживается.

    Установка PyQt5 из исходников на Linux

    Для установки PyQt5 из исходника, вам нужно сделать следующее:

    1. Установить SIP;
    2. Скачать исходник PyQt5;
    3. Настроить и установить.

    Как вы возможно знаете, PyQt5 связывает Python с популярной библиотекой Qt, которая написана на С++.

    Инструмент, который создает эту связь, называется SIP. Так что для установки PyQt5 из исходника, вам для начала нужно установить SIP.

    Для установки SIP, запустите следующую команду:

    sudo pip3 install pyqt5sip

    Теперь вы можете загрузить и установить исходник PyQt5.

    Исходники

    Скачать исходник PyQt5 можно отсюда: https://www.riverbankcomputing.com/software/pyqt/download5

    Руководство по PyQt5

    Внимание: На момент прочтения статьи возможно появилась новая версия которая отличается от той что в скрине. Версия на текущий момент 5.11.3, вы должны самостоятельно скопировать ссылку с сайта и предоставить её в wget. Заметьте, что обновить версию придется во всех ниже предоставленных командах.

    wget https://sourceforge.net/projects/pyqt/files/PyQt5/PyQt5.11.3/PyQt5_gpl5.11.3.tar.gz

    tar xvzf PyQt5_gpl5.11.3.tar.gz

    cd PyQt5_gpl5.11.3

    Мы распаковали сжатый исходник, теперь запустите следующие команды внутри корня папки:

    sudo python3 configure.py

    sudo make

    sudo make install

    Чтобы убедиться в том, что все прошло гладко, попробуйте импортировать модуль PyQt5 так же, как мы делали все раньше. Все должно пройти хорошо.

    Установка PyQt5 из исходников на Windows

    Скачивайте и распакуйте архив с сайта которого мы указали выше.

    Руководство по PyQt5

    Так как SIP требует компилятор GCC, вам нужно установить MinGW, который является портом Windows для компилятора Linux, GCC.

    Единственное, что нужно поменять — это момент конфигурации. Вам нужно сообщить Python о платформе.

    Это можно выполнить следующим образом:

    python configure.py platform win32g++

    make

    make install

    Поздравляем! Вы успешно установили PyQt5 из исходника.

    Установка PyQt5 Designer

    Есть два способа создания GUI приложений при помощи PyQt5:

    1. Дизайн виджетов при помощи кода;
    2. Использование PyQt5 Designer.

    В этом руководстве мы используем PyQt5 Designer, который упрощает процесс на столько, что вы можете выполнить большой объем работы за секунды.

    Недорого заказать услуги SMM продвижения более чем в 9 социальных сетях можно на https://doctorsmm.com/. С помощью этого сервиса можно раскрутить свою группу, страницу, сообщество или канал и набрать нужное количество подписчиков, лайков, репостов и других соцсигналов.

    Дизайнер PyQt5 поставляется вместе с набором инструментов. Для его установки, вам нужно установить эти инструменты.

    $ pip3 install pyqt5tools

    Где находится дизайнер PyQt5?

    После удачной установки, вы можете найти дизайнер PyQt5 здесь:

    C:Program FilesPython36Libsitepackagespyqt5tools

    Кстати, если вы установили только для своего текущего пользовательского аккаунта, вы найдете дизайнер PyQt5 вот здесь:

    C:UsersPythonUserAppDataLocalProgramsPythonPython3632Libsitepackages pyqt5tools

    Вы можете создать короткий путь для него, вместо того, чтобы постоянно переходить к этому расположению для запуска дизайнера PyQt5.

    Как использовать дизайнер PyQt5

    Откройте designer.exe и увидите диалоговое окно, спрашивающее о том, какую форму шаблона вы предпочитаете.

    Руководство по PyQt5

    Существует пять видов доступных шаблонов:

    • Диалоговое окно с кнопками внизу (Dialog with Buttons Bottom): создает форму с кнопками ОК и Cancel в правом нижнем углу формы.
    • Диалоговое окно с кнопками справа (Dialog with Buttons Right): создает форму с кнопками OK и Cancel в верхнем правом углу формы.
    • Диалоговое окно без кнопок (Dialog without Buttons): создает пустую форму;
    • Главное окно (Main Window): создает окно с панелью меню и набором инструментов. Унаследовано из QmainWindow;
    • Виджет (Widget): создает виджет, наследуемый из класса Qwidget. Отличается от диалоговых шаблонов тем, что они наследуются из класса QВialog

    Итак, у нас есть три типа шаблонов. В чем между ними разница?

    Разница между QDialog, QMainWindow, и Qwidget

    • QWidget – это базовый класс для всех GUI Элементов в PyQt5;
    • QDialog используется при запросе чего-либо у пользователя, например, запросы о принятии или отклонении чего-нибудь. Основан на Qwidget.
    • QMainWindow – самый большой шаблон, где вы можете разместить вашу панель инструментов, меню, статус и другие виджеты. Не имеет встроенных кнопок разрешения, таких как в QDialog.

    Загрузка .ui против конвертации .ui в .py

    В данном руководстве мы используем PyQt5 Designer, но перед тем, как мы пойдем дальше, давайте рассмотрим, как еще мы можем использовать сгенерированный файл из PyQt5 Designer.

    Нам нужно открыть PyQt5 Designer, выбрать шаблон Main Window и нажать кнопку create.

    Руководство по PyQt5

    Далее в файловом меню (File), нажимаем сохранить. PyQt5 Designer экспортирует вашу форму в XML с расширением .ui.

    Для использования этого дизайна, у вас есть два способа:

    • Загрузить файл .ui в ваш код Python;
    • Конвертировать файл .ui в файл .py при помощи pyuic5;

    Загрузка .ui файла в ваш код Python

    Чтобы загрузить файл .ui в ваш код Python, вы можете использовать функцию loadUI() из uic вот так:

    from PyQt5 import QtWidgets, uic

    import sys

    app = QtWidgets.QApplication([])

    win = uic.loadUi(«mydesign.ui») # расположение вашего файла .ui

    win.show()

    sys.exit(app.exec())

    Если вы запустите код, вы увидите окно, в котором есть только ярлык.

    Это значит, что ui файл успешно загрузился!

    Мы используем sys.exit(app.exec()) вместо использования app.exec() напрямую, чтобы выслать правильный код статуса, родительский процесс, или процесс вызова.

    Если вы использовали app.exec() напрямую, приложение отправит ноль, что говорит об успехе, и это произойдет даже если приложение упадет.

    Конвертация файла .ui в файл .py при помощи pyuic5

    Давайте попробуем еще один способ и конвертируем файл .ui в код Python:

    $ pyuic5 mydesign.ui o mydesign.py

    Да! Был создан новый файл под названием mydesign.py. Теперь, импортируем этот файл, чтобы показать его в окне.

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    from PyQt5 import QtWidgets

    from mydesign import Ui_MainWindow  # импорт нашего сгенерированного файла

    import sys

    class mywindow(QtWidgets.QMainWindow):

        def __init__(self):

            super(mywindow, self).__init__()

            self.ui = Ui_MainWindow()

            self.ui.setupUi(self)

    app = QtWidgets.QApplication([])

    application = mywindow()

    application.show()

    sys.exit(app.exec())

    Если запустите этот код, вы должны увидеть то же окно, что было в первом методе.

    Преимущество использования второго метода — это автоматическое завершение, которое выполнит IDE, так как все ваши виджеты импортированы. В то же время, пользуясь первым методом, вы просто загружаете файл .ui и вам нужно обращать внимание на названия ваших виджетов.

    Еще одно преимущество использования второго метода. Скорость: вам не нужен парсинг XML для загрузки UI.

    Так что мы можем сказать, что конвертация файла .ui в файл .py – безопаснее для кодинга и быстрее для загрузки.

    Настало время закатить рукава и поиграть с виджетами PyQt5.

    Для внесение виджета QLabel в вашу форму, выполните следующее:

    • Откройте PyQt5 Designer и выберите шаблон Main Window;
    • Перетяните виджет ярлыка из бокса слева;

    Руководство по PyQt5

    Сохраните дизайн в файл как qlabel.ui и конвертируйте его в файл qlabel.py. Теперь поработаем с ярлыком виджета при помощи кода.

    pyuic5 qlabel.ui o qlabel.py

    Результат:
    Руководство по PyQt5

    Меняем шрифт QLabel

    Чтобы поменять шрифт QLabel, используйте метод setFont() и передайте ему QFont следующим образом:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    from PyQt5 import QtWidgets, QtGui

    from mydesign import Ui_MainWindow

    import sys

    class mywindow(QtWidgets.QMainWindow):

        def __init__(self):

            super(mywindow, self).__init__()

            self.ui = Ui_MainWindow()

            self.ui.setupUi(self)

            self.ui.label.setFont(

                QtGui.QFont(‘SansSerif’, 30)

            ) # Изменение шрифта и размера

    app = QtWidgets.QApplication([])

    application = mywindow()

    application.show()

    sys.exit(app.exec())

    После того, как запустите этот код, обратите внимание на то, что ярлык возникает некорректно, так как размер — меньше, чем размер шрифта, который мы используем. Так что нам нужно установить размер ярлыка.

    Меняем размер QLabel

    Чтобы поменять размер QLabel, вам нужно указать его геометрию при помощи метода setGeometry(), вот так:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    from PyQt5 import QtWidgets, QtGui,QtCore

    from mydesign import Ui_MainWindow

    import sys

    class mywindow(QtWidgets.QMainWindow):

        def __init__(self):

            super(mywindow, self).__init__()

            self.ui = Ui_MainWindow()

            self.ui.setupUi(self)

            self.ui.label.setFont(

                QtGui.QFont(‘SansSerif’, 30)

            )

            self.ui.label.setGeometry(

                QtCore.QRect(10, 10, 200, 200)

            ) # изменить геометрию ярлыка

    app = QtWidgets.QApplication([])

    application = mywindow()

    application.show()

    sys.exit(app.exec())

    Руководство по PyQt5

    Меняем текст в QLabel

    Чтобы изменить текст в QLabel, вы можете использовать метод setText(), вот так:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    from PyQt5 import QtWidgets, QtGui,QtCore

    from qlabel import Ui_MainWindow

    import sys

    class mywindow(QtWidgets.QMainWindow):

        def __init__(self):

            super(mywindow, self).__init__()

            self.ui = Ui_MainWindow()

            self.ui.setupUi(self)

            self.ui.label.setFont(

                QtGui.QFont(‘SansSerif’, 30)

            )

            self.ui.label.setGeometry(

                QtCore.QRect(10, 10, 200, 200)

            )

            self.ui.label.setText(«PyScripts») # Меняем текст

    app = QtWidgets.QApplication([])

    application = mywindow()

    application.show()

    sys.exit(app.exec())

    Руководство по PyQt5

    Именно на столько все просто! Давайте рассмотрим другие виджеты.

    Виджет QLineEdit – это редактируемое поле, где вы можете принимать данные от пользователя. LineEdit содержит множество методов, с которыми можно работать.

    QLineEdit PyQt5 Designer

    Я создам новый дизайн qline.ui, используя дизайнер PyQt5 и внесу шесть виджетов QLineEdit и экспортирую его в файл qline.py.

    pyuic5 qline.ui o qline.py

    Cодержимое файла qline.py после конвертации:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    # -*- coding: utf-8 -*-

    # Form implementation generated from reading ui file ‘qline.ui’

    #

    # Created by: PyQt5 UI code generator 5.11.3

    #

    # WARNING! All changes made in this file will be lost!

    from PyQt5 import QtCore, QtGui, QtWidgets

    class Ui_MainWindow(object):

        def setupUi(self, MainWindow):

            MainWindow.setObjectName(«MainWindow»)

            MainWindow.resize(785, 600)

            self.centralwidget = QtWidgets.QWidget(MainWindow)

            self.centralwidget.setObjectName(«centralwidget»)

            self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)

            self.lineEdit.setGeometry(QtCore.QRect(10, 10, 291, 31))

            self.lineEdit.setObjectName(«lineEdit»)

            self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)

            self.lineEdit_2.setGeometry(QtCore.QRect(10, 50, 291, 31))

            self.lineEdit_2.setObjectName(«lineEdit_2»)

            self.lineEdit_3 = QtWidgets.QLineEdit(self.centralwidget)

            self.lineEdit_3.setGeometry(QtCore.QRect(10, 90, 291, 31))

            self.lineEdit_3.setObjectName(«lineEdit_3»)

            self.lineEdit_4 = QtWidgets.QLineEdit(self.centralwidget)

            self.lineEdit_4.setGeometry(QtCore.QRect(10, 130, 291, 31))

            self.lineEdit_4.setObjectName(«lineEdit_4»)

            self.lineEdit_5 = QtWidgets.QLineEdit(self.centralwidget)

            self.lineEdit_5.setGeometry(QtCore.QRect(10, 170, 291, 31))

            self.lineEdit_5.setObjectName(«lineEdit_5»)

            self.lineEdit_6 = QtWidgets.QLineEdit(self.centralwidget)

            self.lineEdit_6.setGeometry(QtCore.QRect(10, 210, 291, 31))

            self.lineEdit_6.setObjectName(«lineEdit_6»)

            MainWindow.setCentralWidget(self.centralwidget)

            self.menubar = QtWidgets.QMenuBar(MainWindow)

            self.menubar.setGeometry(QtCore.QRect(0, 0, 785, 25))

            self.menubar.setObjectName(«menubar»)

            MainWindow.setMenuBar(self.menubar)

            self.statusbar = QtWidgets.QStatusBar(MainWindow)

            self.statusbar.setObjectName(«statusbar»)

            MainWindow.setStatusBar(self.statusbar)

            self.retranslateUi(MainWindow)

            QtCore.QMetaObject.connectSlotsByName(MainWindow)

        def retranslateUi(self, MainWindow):

            _translate = QtCore.QCoreApplication.translate

            MainWindow.setWindowTitle(_translate(«MainWindow», «MainWindow»))

    Давайте познакомимся с методами QLineEdit:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    from PyQt5 import QtWidgets, QtCore

    # Импортируем наш файл

    from qline import Ui_MainWindow

    import sys

    class mywindow(QtWidgets.QMainWindow):

        def __init__(self):

            super(mywindow, self).__init__()

            self.ui = Ui_MainWindow()

            self.ui.setupUi(self)

            # Меняем текст

            self.ui.lineEdit.setText(«Добро пожаловать на PythonScripts»)

            # указать максимальную длину

            self.ui.lineEdit_2.setMaxLength(10)

            # ввод пароля

            self.ui.lineEdit_3.setEchoMode(QtWidgets.QLineEdit.Password)

            # только чтение без изменения содержимого.

            self.ui.lineEdit_4.setReadOnly(True)

            # меняем цвет вводимого текста

            self.ui.lineEdit_5.setStyleSheet(«color: rgb(28, 43, 255);»)

            # изменение цвета фона QLineEdit

            self.ui.lineEdit_6.setStyleSheet(«background-color: rgb(28, 43, 255);»)

    app = QtWidgets.QApplication([])

    application = mywindow()

    application.show()

    sys.exit(app.exec())

    Результат:

    Руководство по PyQt5

    • Для 1-го QLineEdit, мы изменили текст, при помощи метода setText().
    • Для 2-го QLineEdit, мы установили максимум доступных 10-и символов, так что более 10-и приниматься не будут.
    • Для 3-го QLineEdit, мы установили режим пароля, так ваши введенные данные отображаются как звездочки;
    • Для 4-го QLineEdit, мы установили режим «только для чтения», так что редактировать контент не представляется возможным.
    • Для 5-го QLineEdit мы изменили цвет шрифта при помощи метода setStyleSheet() и указали нужный цвет с помощью CSS (как и для обычной веб страницы).
    • Для 6-го QLineEdit мы изменили цвет фона при помощи метода setStyleSheet() и CSS.

    Метод setStyleSheet()

    Метод setStyleSheet() может быть использован с виджетами PyQt5 для изменения стилей.

    Вы можете изменить следующие параметры, пользуясь методом setStyleSheet():

    • Размер и тип шрифта;
    • Цвет текста;
    • Цвет заднего фона;
    • Цвет верхней границы;
    • Цвет нижней границы;
    • Цвет левой границы;
    • Цвет правой границы;
    • Цвет выделения;
    • Цвет выделения заднего фона.

    Это наиболее важные значения, которые можно передать методу setStyleSheet().

    Большая часть ваших программ Python будут содержать виджет QPushButton. Вы нажимаете кнопку, и какой-нибудь код выполняется.

    Если у вас имеется опыт в программировании, вы могли слышать об обработке событий, где вы взаимодействуете с виджетом и функция выполняется.

    Суть идеи сохранилась такой же и в PyQt5, только определения немного отличаются.

    Событие клика в PyQt5 называется сигналом, и метод, который будет выполняться, называется слот.

    Так что при нажатии на QPushButton, сигнал издается. Названием сигнала в данном случае, является clicked().

    Чтобы связать сигнал со слотом, вам нужно использовать метод connect(), что вы сейчас и увидите.

    Этот процесс обработки события продолжает работать до тех пор, пока вы не закроете вашу форму, или главный виджет.

    Давайте создадим форму myform.ui при помощи QLabel и QPushButton и экспортируем её в файл myform.py.

    QLabel QPushButton

    Экспортируем myform.ui в myform.py

    pyuic5 myform.ui o myform.py

    Сейчас, мы подключим сигнал clicked() к слоту при помощи метода connect(), вот так:

    self.ui.pushButton.clicked.connect(self.btnClicked)

    Здесь, btnClicked – это слот, или функция, которая будет выполнена после того, как вы кликните на QPushButton.

    Итак, ваш код будет выглядеть следующим образом:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    from PyQt5 import QtWidgets

    # Импортируем наш шаблон.

    from myform import Ui_MainWindow

    import sys

    class mywindow(QtWidgets.QMainWindow):

        def __init__(self):

            super(mywindow, self).__init__()

            self.ui = Ui_MainWindow()

            self.ui.setupUi(self)

            # подключение клик-сигнал к слоту btnClicked

            self.ui.pushButton.clicked.connect(self.btnClicked)

        def btnClicked(self):

            self.ui.label.setText(«Вы нажали на кнопку!»)

            # Если не использовать, то часть текста исчезнет.

            self.ui.label.adjustSize()

    app = QtWidgets.QApplication([])

    application = mywindow()

    application.show()

    sys.exit(app.exec())

    Результат:

    QPushButton

    Замечательно!

    Визуальный редактор слота/сигнала

    Мы видели, как подключать сигнал виджета к слоту при помощи метода connect(), но это не единственный способ.

    На самом деле, для каждого виджета есть предопределенные слоты. Вы можете связать сигнал с любым предопределенным слотом, без необходимости кодить в дизайнере PyQt5.

    Перетяните QPushButton и QLineEdit в вашу форму.

    Нажмите F4 и перетяните курсор из QPushButton и отпустите его в верхней части QLineEdit. Чтобы вернуться в обычный режим, нажмите на F3.

    Руководство по PyQt5

    Благодаря этому появится редактор сигнала/слота.

    Руководство по PyQt5

    Слева находятся предопределенные сигналы, справа — предопределенные слоты. Скажем, нам нужно подключить сигнал clicked() с слотом «очистки содержимого«.

    Выберите сигнал clicked слева и выберите clear слот справа и нажмите OK.

    Руководство по PyQt5

    После выполнения подключений ваших сигналов и слотов, вы можете выйти из этого режима, нажав ESC, или F3.

    Сейчас, если вы запустите эту форму, и нажмете QPushButton, то любой текст в QLineEdit будет очищен. Вы можете редактировать или удалять эти связи в панели редактора сигналов и слотов.

    Сохраните форму как signaledit.ui и конвертируем её в signaledit.py:

    pyuic5 signaledit.ui o signaledit.py

    Полученный файл импортируем в наш код:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    from PyQt5 import QtWidgets

    # Импортируем наш шаблон.

    from signaledit import Ui_MainWindow

    import sys

    class mywindow(QtWidgets.QMainWindow):

        def __init__(self):

            super(mywindow, self).__init__()

            self.ui = Ui_MainWindow()

            self.ui.setupUi(self)

    app = QtWidgets.QApplication([])

    application = mywindow()

    application.show()

    sys.exit(app.exec())

    Результат:

    Руководство по PyQt5

    Как выпускать сигналы в PyQt5

    Мы увидели, как работают сигналы и слоты. Все сигналы, с которыми мы работали, являются предопределенными для нас.

    Но что на счет выпуска собственного сигнала?

    Это очень просто! Вы можете сделать это, просто использовав класс pyqtSignal, как показано ниже:

    • Определите ваше событие типом pyqtSignal;
    • Вызовите метод emit() в том месте, где вы хотите, чтобы произошло событие.

    Скажем, у нас есть класс nut, и мы хотим, чтобы сигнал cracked был выпущен.

    from PyQt5.QtCore import pyqtSignal, QObject

    class nut(QObject):

        cracked = pyqtSignal()

        def __init__(self):

            QObject.__init__(self)

        def crack(self):

            self.cracked.emit()

    Как использовать сигнал

    Сейчас мы сделаем наш пример более практичным, создаем экземпляр класса nut и выпуская сигнал cracked:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    from PyQt5.QtCore import pyqtSignal, QObject

    class nut(QObject):

        cracked = pyqtSignal()

        def __init__(self):

            QObject.__init__(self)

        def crack(self):

            self.cracked.emit()

    def crackit():

        print(«hazelnut cracked!»)

    hazelnut = nut()

    # подключение сигнала cracked к слоту crackit

    hazelnut.cracked.connect(crackit)

    hazelnut.crack()

    Сигнал cracked успешно выпущен.

    Переопределение сигнала (события) в PyQt5

    Иногда нам может понадобиться переопределить поведение по умолчанию для особенных событий или сигналов.

    Давайте рассмотрим практичный пример для этого случая. Если вы хотите закрыть окно, когда пользователь нажимает на определенную клавишу, вы можете переопределить keyPressEvent внутри вашего главного окна следующим образом:

    def keyPressEvent(self, e):

        if e.key() == Qt.Key_F12:

            self.close()

    Теперь, если пользователь нажмет клавишу F12, главное окно будет закрыто.

    Здесь мы переопределили основной сигнал нажатия в главном окне и закрыли это окно.

    Вместо того, чтобы разрешить пользователю вводить свои данные в QLineEdit, или любом другом редактируемом виджете, мы можем использовать виджет QCombobBox, чтобы дать список данных, из которого он сможет выбирать.

    Давайте перетянем QComboBox в нашу форму и взглянем на её методы.

    Руководство по PyQt5

    Сохраняем файл как combobox.ui и конвертируем его в combobox.py:

    pyuic5 combobox.ui o combobox.py

    Если вы запустите приложение сейчас, обратите внимание на то, что QComboBox — пустой. Чтобы вносить объекты в QComboBox, используйте метод addItem():

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    from PyQt5 import QtWidgets

    from combobox import Ui_MainWindow

    import sys

    class mywindow(QtWidgets.QMainWindow):

        def __init__(self):

            super(mywindow, self).__init__()

            self.ui = Ui_MainWindow()

            self.ui.setupUi(self)

            # Добавляем новые значения

            self.ui.comboBox.addItem(«Программист»)

            self.ui.comboBox.addItem(«Дизайнер»)

    app = QtWidgets.QApplication([])

    application = mywindow()

    application.show()

    sys.exit(app.exec())

    Руководство по PyQt5

    Получаем все элементы из QComboBox

    Нет прямого способа получить все значения из QComboBox, но вы можете применить цикл Python для этой цели. Для этого подойдет функция range.

    for i in range(self.ui.comboBox.count()):

        print(self.ui.comboBox.itemText(i))

    Выбор одного элемента из QCombobox

    Чтобы выбрать элемент из QComboBox, у вас есть два метода:

    # по индексу, который начинается с нуля

    self.ui.comboBox.setCurrentIndex(1)

    #выбор по тексту

    self.ui.comboBox.setCurrentText(«Second item»)

    Обратите внимание на то, что при выборе элемента по тексту, следует убедиться в том, что вы вводите правильный текст. В противном случае, QComboBox останется на первом элементе.

    Если вы хотите просмотреть вашу базу данных в формате таблицы, в PyQt5 предоставляется QTableWidget как раз для этой цели.

    QTableWidget состоит из клеток, каждая клетка — экземпляр класса QTableWidgetItem.

    Давайте создадим форму, которая содержит QTableWidget и QPushButton.

    QTableWidget

    Перетяните QTableWidget и QPushButton из PyQt5 Designer. После этого, сохраните форму как qtable.ui и конвертируйте дизайн в qtable.py.

    pyuic5 qtable.ui o qtable.py

    Чтобы добавлять ряды в QTableWidget, вы можете использовать метод setRowCount().

    Для внесения столбцов в QTableWidget, воспользуйтесь методом setColumnCount().

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    from PyQt5 import QtWidgets

    # Импортируем нашу форму.

    from qtable import Ui_MainWindow

    import sys

    class mywindow(QtWidgets.QMainWindow):

        def __init__(self):

            super(mywindow, self).__init__()

            self.ui = Ui_MainWindow()

            self.ui.setupUi(self)

            self.ui.tableWidget.setColumnCount(2)

            self.ui.tableWidget.setRowCount(4)

    app = QtWidgets.QApplication([])

    application = mywindow()

    application.show()

    sys.exit(app.exec())

    Руководство по PyQt5

    Теперь вы можете писать текст вручную внутри клеток QTableWidget.

    Очистка содержимого QTableWidget

    Чтобы очистить содержимое QTableWidget, вы можете использовать метод clear, вот так:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    from PyQt5 import QtWidgets

    # Импортируем нашу форму.

    from qtable import Ui_MainWindow

    import sys

    class mywindow(QtWidgets.QMainWindow):

        def __init__(self):

            super(mywindow, self).__init__()

            self.ui = Ui_MainWindow()

            self.ui.setupUi(self)

            self.ui.tableWidget.setColumnCount(2)

            self.ui.tableWidget.setRowCount(4)

            # очистка таблицы при клике на кнопку.

            self.ui.pushButton.clicked.connect(self.clear)

        def clear(self):

            self.ui.tableWidget.clear()

    app = QtWidgets.QApplication([])

    application = mywindow()

    application.show()

    sys.exit(app.exec())

    Руководство по PyQt5

    Заполнение QTableWidget из кода

    Чтобы заполнить QtableWidget программно, вам нужно использовать метод setItem() для каждого объекта QtableWidgetItem.

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    from PyQt5.QtWidgets import QTableWidgetItem

    from qtable import *

    import sys

    data = []

    data.append((‘Заполнить’, ‘QTableWidget’))

    data.append((‘с данными’, ‘в Python’))

    data.append((‘очень’, ‘просто’))

    class mywindow(QtWidgets.QMainWindow):

        def __init__(self):

            super().__init__()

            self.ui = Ui_MainWindow()

            self.ui.setupUi(self)

            self.ui.tableWidget.setRowCount(3)

            self.ui.tableWidget.setColumnCount(2)

            # очистка таблицы при клике на кнопку.

            self.ui.pushButton.clicked.connect(self.clear)

            row = 0

            for tup in data:

                col = 0

                for item in tup:

                    cellinfo = QTableWidgetItem(item)

                    self.ui.tableWidget.setItem(row, col, cellinfo)

                    col += 1

                row += 1

        def clear(self):

            self.ui.tableWidget.clear()

    app = QtWidgets.QApplication([])

    win = mywindow()

    win.show()

    sys.exit(app.exec())

    Руководство по PyQt5

    • Сначала мы создали список трех кортежей Python;
    • Внутри конструктора главного окна, мы установили количество столбцов и рядов;
    • Далее мы перебираем список и получаем каждый кортеж в списке, для заполнения клеток таблицы, при помощи метода setItem()
    • Наконец, мы показываем главное окно.

    Делаем QTableWidget нередактируемым (только для чтения)

    Вам может не понравится то, что клетки в вашей таблице могут быть отредактированы пользователем в том или ином случае. Например, при отображении нередактируемых данных. В этом случае возможность редактирования не имеет никакого смысла.

    Чтобы сделать QTableWidget нередактируемым, вы можете использовать метод setFlags(), чтобы сделать каждый QTableWidgetItem доступным только для чтения.

    # Только для чтения

    cellinfo.setFlags(

        QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled

    )

    Вам нужно установить флажки, перед тем как настраивать содержимое вашей клетки.

    Таким образом, ваш код будет выглядеть вот так:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    from PyQt5.QtWidgets import QTableWidgetItem

    from qtable import *

    import sys

    data = []

    data.append((‘Заполнить’, ‘QTableWidget’))

    data.append((‘с данными’, ‘в Python’))

    data.append((‘очень’, ‘просто’))

    class mywindow(QtWidgets.QMainWindow):

        def __init__(self):

            super().__init__()

            self.ui = Ui_MainWindow()

            self.ui.setupUi(self)

            self.ui.tableWidget.setRowCount(3)

            self.ui.tableWidget.setColumnCount(2)

            # очистка таблицы при клике на кнопку.

            self.ui.pushButton.clicked.connect(self.clear)

            row = 0

            for tup in data:

                col = 0

                for item in tup:

                    cellinfo = QTableWidgetItem(item)

                    # Только для чтения

                    cellinfo.setFlags(

                        QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled

                    )

                    self.ui.tableWidget.setItem(row, col, cellinfo)

                    col += 1

                row += 1

        def clear(self):

            self.ui.tableWidget.clear()

    app = QtWidgets.QApplication([])

    win = mywindow()

    win.show()

    sys.exit(app.exec())

    Теперь, если вы попробуете отредактировать какую-либо клетку — у вас не выйдет, так как QtableWidgetItem теперь нельзя редактировать

    До этого момента, названия столбцов QTableWidget были числами. Как на счет того, чтобы поменять названия столбцов на что-нибудь другое?

    Чтобы задать текст заголовкам QTableWidget, вы можете использовать метод setHorizontalHeaderLabels(), вот так:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    from PyQt5.QtWidgets import QTableWidgetItem

    from qtable import *

    import sys

    data = []

    data.append((‘BMW’, ‘1991’))

    data.append((‘Audi’, ‘2003’))

    data.append((‘Volvo’, ‘2010’))

    class mywindow(QtWidgets.QMainWindow):

        def __init__(self):

            super().__init__()

            self.ui = Ui_MainWindow()

            self.ui.setupUi(self)

            self.ui.tableWidget.setRowCount(3)

            self.ui.tableWidget.setColumnCount(2)

            # очистка таблицы при клике на кнопку.

            self.ui.pushButton.clicked.connect(self.clear)

            # заголовки для столбцов.

            self.ui.tableWidget.setHorizontalHeaderLabels(

                (‘Марка’, ‘Год выпуска’)

            )

            row = 0

            for tup in data:

                col = 0

                for item in tup:

                    cellinfo = QTableWidgetItem(item)

                    self.ui.tableWidget.setItem(row, col, cellinfo)

                    col += 1

                row += 1

        def clear(self):

            self.ui.tableWidget.clear()

    app = QtWidgets.QApplication([])

    win = mywindow()

    win.show()

    sys.exit(app.exec())

    setHorizontalHeaderLabels

    Таким же образом, вы можете менять заголовок ряда, при помощи метода setVerticalHeaderLabels():

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    from PyQt5.QtWidgets import QTableWidgetItem

    from qtable import *

    import sys

    data = []

    data.append((‘BMW’, ‘1991’))

    data.append((‘Audi’, ‘2003’))

    data.append((‘Volvo’, ‘2010’))

    class mywindow(QtWidgets.QMainWindow):

        def __init__(self):

            super().__init__()

            self.ui = Ui_MainWindow()

            self.ui.setupUi(self)

            self.ui.tableWidget.setRowCount(3)

            self.ui.tableWidget.setColumnCount(2)

            # очистка таблицы при клике на кнопку.

            self.ui.pushButton.clicked.connect(self.clear)

            # заголовки для столбцов.

            self.ui.tableWidget.setHorizontalHeaderLabels(

                (‘Марка’, ‘Год выпуска’)

            )

            # названия рядов.

            self.ui.tableWidget.setVerticalHeaderLabels(

                (‘900$’, ‘5000$’, ‘13000$’)

            )

            row = 0

            for tup in data:

                col = 0

                for item in tup:

                    cellinfo = QTableWidgetItem(item)

                    self.ui.tableWidget.setItem(row, col, cellinfo)

                    col += 1

                row += 1

        def clear(self):

            self.ui.tableWidget.clear()

    app = QtWidgets.QApplication([])

    win = mywindow()

    win.show()

    sys.exit(app.exec())

    setVerticalHeaderLabels

    Как сортировать QTableWidget

    Вы можете сделать ваш QTableWidget сортируемым, при помощи метода setSortingEnabled().

    self.ui.tableWidget.setSortingEnabled(True)

    Теперь, если пользователь нажмет на любой заголовок столбца, он может сортировать данные в порядке убывания, или возрастания.

    Вы можете использовать этот метод перед, или до наполнения QTableWidget данными.

    Что на счет сортировки в QTableWidget, но только для определенного столбца?

    Вы можете использовать метод sortByColumn(), и указать индекс столбца и порядок сортировки, вот так:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    61

    62

    63

    64

    from PyQt5.QtWidgets import QTableWidgetItem

    from qtable import *

    import sys

    data = []

    data.append((‘BMW’, ‘2005’))

    data.append((‘Audi’, ‘2003’))

    data.append((‘Volvo’, ‘1990’))

    data.append((‘Toyota’, ‘2018’))

    class mywindow(QtWidgets.QMainWindow):

        def __init__(self):

            super().__init__()

            self.ui = Ui_MainWindow()

            self.ui.setupUi(self)

            # Кол-во рядов меняется в зависимости от значений в data.

            self.ui.tableWidget.setRowCount(

                len(data)

            )

            # Кол-во столбцов меняется в зависимости от data.

            self.ui.tableWidget.setColumnCount(

                len(data[0])

            )

            # очистка таблицы при клике на кнопку.

            self.ui.pushButton.clicked.connect(self.clear)

            # заголовки для столбцов.

            self.ui.tableWidget.setHorizontalHeaderLabels(

                (‘Марка’, ‘Год выпуска’)

            )

            row = 0

            for tup in data:

                col = 0

                for item in tup:

                    cellinfo = QTableWidgetItem(item)

                    self.ui.tableWidget.setItem(row, col, cellinfo)

                    col += 1

                row += 1

            # Сортировка по году выпуска.

            # 0 — Марка

            # 1 — Год выпуска

            self.ui.tableWidget.sortByColumn(

                1, QtCore.Qt.AscendingOrder

            )

        def clear(self):

            self.ui.tableWidget.clear()

    app = QtWidgets.QApplication([])

    win = mywindow()

    win.show()

    sys.exit(app.exec())

    Кстати, вы можете использовать метод sortItems() для сортировки QTableWidget в возрастающем порядке по умолчанию.

    self.ui.tableWidget.sortItems(0)

    Или вы можете определить свой порядок сортировки:

    self.ui.tableWidget.sortItems(1, QtCore.Qt.DescendingOrder)

    Помните, что если вы хотите сортировать ваши столбцы программно, вам нужно использовать методы сортировки после заполнения QTableWidget данными, иначе они не будут в нужном вам порядке.

    Добавляем QComboBox в QTableWidget

    У вас может появится задача, чтобы пользователь выбирал значение внутри QTableWidget, вместо ввода текста.
    Как на счет того, чтобы добавить QComboBox в QTableWidgetItem?

    Чтобы добавить QComboBox внутрь QTableWidgetItem, вы можете использовать метод setCellWidget():

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    from PyQt5.QtWidgets import QTableWidgetItem

    from qtable import *

    import sys

    data = [‘Python’, ‘PHP’, ‘Java’]

    class mywindow(QtWidgets.QMainWindow):

        def __init__(self):

            super().__init__()

            self.ui = Ui_MainWindow()

            self.ui.setupUi(self)

            self.ui.tableWidget.setRowCount(3)

            self.ui.tableWidget.setColumnCount(2)

            row = 0

            for item in data:

                cellinfo = QTableWidgetItem(item)

                combo = QtWidgets.QComboBox()

                combo.addItem(«Изучить»)

                combo.addItem(«Забыть»)

                combo.addItem(«Удалить»)

                self.ui.tableWidget.setItem(row, 0, cellinfo)

                self.ui.tableWidget.setCellWidget(row, 1, combo)

                row += 1

    app = QtWidgets.QApplication([])

    win = mywindow()

    win.show()

    sys.exit(app.exec())

    QComboBox в QTableWidget

    Отлично!

    Не ограничивайте себя в воображении и попробуйте вставлять различные виджеты, такие как QСheckbox, или даже QProgressBar.

    QProgressBar в QTableWidget

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    from PyQt5.QtWidgets import QTableWidgetItem

    from qtable import *

    import sys

    data = (

        (‘Python’, 95.5),

        (‘PHP’, 55.1),

        (‘Java’, 0.29)

    )

    class mywindow(QtWidgets.QMainWindow):

        def __init__(self):

            super().__init__()

            self.ui = Ui_MainWindow()

            self.ui.setupUi(self)

            self.ui.tableWidget.setRowCount(3)

            self.ui.tableWidget.setColumnCount(2)

            self.ui.tableWidget.setHorizontalHeaderLabels(

                (‘Язык’, ‘Знания’)

            )

            line = 0

            for item in data:

                cellinfo = QTableWidgetItem(item[0])

                self.ui.tableWidget.setItem(line, 0, cellinfo)

                # Создаем QProgressBar

                progress = QtWidgets.QProgressBar()

                progress.setMinimum(0)

                progress.setMaximum(100)

                # Формат вывода: 10.50%

                progress.setValue(item[1])

                progress.setFormat(‘{0:.2f}%’.format(item[1]))

                # Добавляем виджет в ячейку.

                self.ui.tableWidget.setCellWidget(line, 1, progress)

                line += 1

    app = QtWidgets.QApplication([])

    win = mywindow()

    win.show()

    sys.exit(app.exec())

    Руководство по PyQt5

    Указанный выше код будет таким же, за исключением строки, где вы создаете QСomboBox, здесь вы внесете тот виджет, который вам нужен.

    Единственное ограничение — это ваше собственное воображение!

    Компиляция Python приложения

    Вы можете конвертировать ваши программы Python в бинарные исполняемые, и для этого имеется множество инструментов.

    Лично я предпочитаю pyinstaller, который подходит для упаковки кода Python в исполняемый файл под Windows, Mac OS X, Solaris, Linux и FreeBSD. Все это будет поддерживаться 32 и 64-битной архитектурой.

    Лучшая в pyinstaller для нас — это наличие полной поддержки для PyQt5.

    Отлично! Для начала, установим pyinstaller:

    $ pip3 install pyinstaller

    После проведения установки, вы можете конвертировать программы Python следующим образом:

    Ваш исполняемый файл будет создан в папке под названием dist в директории вашей программы Python.

    Как вы могли догадаться, вместе с исполняемым файлом будет генерироваться множество зависимостей. Как сделать из этого один файл?

    Вы можете создать один исполняемый файл. Вот так:

    $ pyinstaller onefile test.py

    Каждый раз, когда вы запускаете ваш исполняемый файл, будет возникать окно, как его спрятать?

    Вы можете использовать флажки -w или –noconsole, чтобы спрятать окно консоли:

    Эта опция доступна только для Windows и Mac OS X.

    Pyinstaller предоставляет множество вариантов для упаковки вашего приложения, чтобы увидеть полный список, используйте –help:

    Я старался сделать все на столько простым, на сколько это возможно. Надеюсь, это руководство оказалось для вас полезным.

    Спасибо.

    Являюсь администратором нескольких порталов по обучению языков программирования Python, Golang и Kotlin. В составе небольшой команды единомышленников, мы занимаемся популяризацией языков программирования на русскоязычную аудиторию. Большая часть статей была адаптирована нами на русский язык и распространяется бесплатно.

    E-mail: vasile.buldumac@ati.utm.md

    Образование
    Universitatea Tehnică a Moldovei (utm.md)

    • 2014 — 2018 Технический Университет Молдовы, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
    • 2018 — 2020 Технический Университет Молдовы, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»

    Понравилась статья? Поделить с друзьями:
  • How to install windows to usb hdd
  • How to install windows to ssd
  • How to install windows subsystem for linux
  • How to install windows phone on android phone
  • How to install windows media player