PyQt5 - Lesson 002. Hello World on PyQt5

qt, PyCharm, qt уроки, qt5, PyQt5

Python - a high-level general purpose programming language, focused on improving developer productivity and code readability. And also widely used for writing Web-based applications. But to work with Qt for Python was developed Library PyQt5 by Riverbank Computing, which is a set of "anchors" to Qt5 library.

Out of interest, I decided to write a small Hello World using PyQt5.

Installing

First install Python, in my case it is Python 3.5.2.

For Windows, you can download the installation package from the official Python website. For Linux, we can use the standard package manager.

Next, you need to install PyQt5. In the case of Linux can be installed using either a standard package manager. For example, for deb-based distributions:

sudo apt-get install python python3-pyqt5 pyqt5-dev-tools

Either install the first pip utility to install Python packages:

sudo apt-get install python-pip

And to install with the help of this tool, which will be similar for Windows, and for Linux systems:

pip install PyQt5

IDE PyCharm has been chosen to develop in Python.

Hello World

Now write a small program to PyQt5, which will run the application window with the words and have one menu item in the menu bar. By clicking on the item will close the application.

Full text of program

from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import QMainWindow, QLabel, QGridLayout, QWidget, qApp, QAction
from PyQt5.QtCore import QSize


# Inherit from QMainWindow
class MainWindow(QMainWindow):
    # override the class constructor
    def __init__(self):
        # Invoke the method of super class
        QMainWindow.__init__(self)

        self.setMinimumSize(QSize(480, 320))    # Set sizes
        self.setWindowTitle("Hello world!!!")   # Set title of window
        central_widget = QWidget(self)          # Create a central widget
        self.setCentralWidget(central_widget)   # Set the central widget

        grid_layout = QGridLayout(self)         # Create a QGridLayout
        central_widget.setLayout(grid_layout)   # Set Layout to central widget

        title = QLabel("Hello World on the PyQt5", self)    # Create a label
        title.setAlignment(QtCore.Qt.AlignCenter)   # Set alignment of text
        grid_layout.addWidget(title, 0, 0)          # and add it to layout

        exit_action = QAction("&Exit", self)    
        exit_action.setShortcut('Ctrl+Q')       
        # Connect the signal triggered in the slot quit qApp. 
        # Signals and Slots syntax PyQt5 is markedly different from the one used Qt5 C ++
        exit_action.triggered.connect(qApp.quit)
        # Set in the menu bar Action.
        file_menu = self.menuBar()
        file_menu.addAction(exit_action)


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    mw = MainWindow()
    mw.show()
    sys.exit(app.exec())

Differences

1. if __name__ == "__main__":

In a Python applications can often find the following construction:

if __name__ == "__main__":

Since you can specify the Python-script, a program code using this design to perform in the event that it runs as a standalone application. In case, if the script will be imported into another script, the code that will follow this structure will not be called.

2. Syntax of signals and slots

In PyQt5 use the following syntax signals and slots as shown in the example QAction use.

exit_action = QAction("&Exit", self)    # Создаём Action с помощью которого будем выходить из приложения
exit_action.triggered.connect(qApp.quit)

While in Qt C ++ the same thing would look like this:

QAction *exit = new QAction("&Exit", this);
connect(exit, &QAction::triggered, qApp, &QApplication::quit);

3. Python

Perhaps the most obvious;-)
Here without comment.

Conclusion

The result is a program similar to the following.

We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.
Support the author Donate
IR

Отлично получилось. Работает. Спс

Comments

Only authorized users can post comments.
Please, Log in or Sign up
How to become an author?

Contribute to the evolution of the EVILEG community.

Learn how to become a site author.

Learn it
Donate

Good day, Dear Users!!!

I am Evgenii Legotckoi, developer of EVILEG. And it is my hobby project, which helps to learn programming another programmers and developers

If the site helped you, and you want also support the development of the site, than you can donate by following ways

PayPalYandex.Money
Timeweb

Let me recommend you the excellent hosting on which EVILEG is located.

For many years, Timeweb has been proving his stability.

For projects on Django I recommend VDS hosting

View Hosting Timeweb
g
May 29, 2020, 2:32 p.m.
glushchenkoin

C ++ - Test 004. Pointers, Arrays and Loops

  • Result:40points,
  • Rating points-8
AS
May 26, 2020, 11:29 a.m.
Artem Sun-Dun-Chan

C ++ - Test 004. Pointers, Arrays and Loops

  • Result:50points,
  • Rating points-4
MN
May 25, 2020, 11:33 a.m.
Mitja Nagibin

C ++ - Test 004. Pointers, Arrays and Loops

  • Result:50points,
  • Rating points-4
Last comments
May 29, 2020, 1 p.m.
Evgenij Legotskoj

Django - Tutorial 023. Like Dislike system using GenericForeignKey

Думал так, но похоже что нет. {{ post.votes.likes.user.username }} Это же QuerySet будет, а не отдельный единственный объект {% for vote in post.votes %} {{ vote.user.username …
May 29, 2020, 11:43 a.m.
Vladislav Melenchuk

Django - Tutorial 023. Like Dislike system using GenericForeignKey

А как получить имя пользователя, который поставил лайк? Думал так, но похоже что нет. {{ post.votes.likes.user.username }}
May 29, 2020, 6:30 a.m.
Evgenij Legotskoj

Qt/C++ - Lesson 039. How to paint stroke in QSqlTableModel by value in the column?

У меня работает. Исправлял в проекте, который приложен к статье. А что происходит в вашем коде, с учётом места вызова этого кода, я знать не могу ;) Дебажьте и добавляйте условия, кото…
MA
May 29, 2020, 6:27 a.m.
Mihail A

Qt/C++ - Lesson 039. How to paint stroke in QSqlTableModel by value in the column?

QModelIndexList rowIndexes = ui->tableView->selectionModel()->selectedRows(); model->removeRows(rowIndexes.first().row(), rowIndexes.size()); model-&…
May 29, 2020, 6:14 a.m.
Evgenij Legotskoj

Django - Tutorial 036. How to add authentication through social networks. VKontakte

Неправильно прописали URL, на который возвращается ответ от OAuth ВКонтакте. Настраивайте ваше приложение в консоли разработчика ВКонтакте
Now discuss on the forum
DK
May 29, 2020, 1:27 p.m.
Dzhon Kofi

QMap<> какой ключ лучше

это ясно. Вопрос в том, как быстро мапа будет отрабатывать, если ключом будет QModelIndex. Какой параметр индекса возьмет за ключ. И вот насколько это будет медленнее или быстрее, чем QString пр…
DK
May 29, 2020, 11:10 a.m.
Dzhon Kofi

QModelIndex становится не действительным, но валидный

Привет. Есть проблема с индексом и для меня это чистая магия: Сначала, что делаю: на вьюхе есть редактируемые ячейки. Пользователь редактирует одну, потом внезапно решает не сохраниться и ш…
May 29, 2020, 7:52 a.m.
Vladimir Sergeevich

Масштабирование двумя пальцами на мобильных платформах

Я планировал описать этот момент на блоге, но никак руки не доходят (уже год). Летом дойдут. Тем не менее, у меня в репозитории лежит рабочий код игрушки "пазлы", где есть все это. …
May 29, 2020, 6:51 a.m.
Evgenij Legotskoj

Графическое ускорение

Зависит от платформы и поддерживаемых технологий. В QML в первую очередь используется OpenGL и отрисовка производится средствами GPU. Но может переключаться на использование CPU и прог…
IP
May 29, 2020, 1:55 a.m.
Igor' Poroshin

QTablwView + QSqlQueryModel скрыть пустой столбец

Да, понятно. В данном случае лучше использовать серверную процедуру (если такие поддерживаются), в которой будет проверяться наличие всех пустых строк у нужного столбца и вызываться соответ…
About
Services
© EVILEG 2015-2020
Recommend hosting TIMEWEB