Рубрики
Без рубрики

Учебник Python QT: создать простой чат клиент

Этот учебник Python QT показывает, как создать (работает!) Чат клиент для Windows, Mac или Linux. Мы устанавливаем QT для Python, напишите клиенту и построим установщик для него .. Теги с Python, Qt.

Этот учебник Python QT показывает, как создать (работает!) Чат клиент для Windows, Mac или Linux. Мы установим QT для Python, напишите клиенту и создайте установщик для него.

Qt это рамка для GUI. Разработано в C ++. Но в 2018 году компания QT выпустила Qt для Python Отказ Это дает вам повышенную производительность этого динамического языка, сохраняя большую часть скорости C ++.

Перед выходом Qt для Python большинство людей использовали библиотеку под названием PYQT Отказ Это более зрелые, и очень стабильны. Его недостатком заключается в том, что для вас требуется приобрести лицензию на коммерческие проекты. Это в отличие от Qt для Python, который лицензирован под LGPL и, таким образом, обычно может использоваться бесплатно.

С точки зрения кода, он не имеет большого значения, что из двух привязки вы используете. Их API почти точно так же. Мы используем QT для Python здесь, потому что это новее. Если вы хотите использовать PYQT вместо того, чтобы проверить Этот урок PYQT5 Отказ

Установка QT в Python 3 очень прост благодаря модулям VINV и PIP. Откройте терминал и перейдите в пустой каталог. Предполагая, что каталог установки Python находится на вашем пути, вы можете ввести следующее:

python -m venv virtualenv

Это создает виртуальную среду в Виртуальский каталог. Он будет хранить зависимости вашего проекта.

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

call virtualenv\scripts\activate.bat  # on Windows
source virtualenv/bin/activate        # On Mac / Linux

Вы можете сказать, что активация была успешной по (Virtualenv) префикс в вашей оболочке:

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

Чтобы установить QT для Python, введите следующую команду:

pip install PySide2

Это называется Pyside2 Для исторических причин: Писиде были первыми официальными привязками Python, выпущенные в 2009 году, а затем-владельцем Qt Nokia. После проданного Nokia QT в 2011 году развитие писсида остановилось. Pyside2 – это усилия сообщества, чтобы сохранить его. Наконец, в 2016 году компания QT совершил официально поддерживать этот проект.

Теперь мы будем использовать Qt для Python, чтобы создать (Working!) Чат клиент. Вот что похоже:

Мы построим эту вершину книзу. Во-первых, текстовая область, которая отображает все сообщения:

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

Первая строка рассказывает Python загрузить Pyside:

from PySide2.QtWidgets import *

Далее мы создаем Qapplation Отказ Это требуется в любом QT-приложении. Мы передаем пустые скобки [] Чтобы указать, что нет параметров командной строки:

app = QApplication([])

Затем мы создаем текстовую область через строку:

text_area = QTextEdit()

Мы говорим Qt отображать текстовую область:

text_area.show()

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

app.exec_()

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

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

Теперь мы хотим добавить текстовое поле для ввода сообщений ниже текстовой области:

Но как мы говорим Qt, чтобы разместить его ниже (а не, скажем, справа от) текстовой области? Ответ через Макет Отказ Макеты рассказывают Qt, как расположить элементы GUI.

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

from PySide2.QtWidgets import *
app = QApplication([])
layout = QVBoxLayout()
layout.addWidget(QTextEdit())
layout.addWidget(QLineEdit())
window = QWidget()
window.setLayout(layout)
window.show()
app.exec_()

Мы снова импортируем Pyside2 и создать Qapplation Отказ Мы приступаем к созданию макета: Сначала текстовая область, как тот, который у нас был раньше. Затем текстовое поле типа QLineEdit. . Далее мы создаем окно, чтобы содержать нашу макет. Мы заканчиваем, позвонив .Показать () на него и используя app.exec_ () Передать контроль на Qt.

Qwidget , который мы видели выше, является наиболее основным элементом GUI в Qt. Все остальные элементы управления являются специализация: кнопки, этикетки, окна, текстовые поля и т. Д. Виджеты похожи на HTML-элементы в том, что они инкапсулируют внешность и поведение и могут быть вложены.

Вот скриншот самых важных виджетов QT:

Это например, показывает:

(Код для скриншота доступен здесь для вашей справки.)

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

pip install requests

Как только вы сделали это, начните Python снова и введите следующие команды:

import requests
chat_url = 'https://build-system.fman.io/chat'
requests.get(chat_url).text

Это должно дать вам HTML последних сообщений чата.

Мы также можем отправить сообщение. Вот пример, но обязательно используйте свое собственное имя и текст:-)

requests.post(chat_url, {'name': 'Matt', 'message': 'Nice tutorial'})

Когда вы тогда звоните requests.get (Chat_url) .Text Опять же, ваше сообщение должно быть в конце вывода.

Наш чат клиент должен обрабатывать определенные события:

  • Когда пользователь нажимает Введите текущее сообщение должно быть отправлено на сервер.
  • Один раз в секунду, мы хотим получать и отображать новые сообщения с сервера.

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

from PySide2.QtWidgets import *
from PySide2.QtCore import QTimer
app = QApplication([])
timer = QTimer()
timer.timeout.connect(lambda: print('hi!'))
timer.start(1000)
app.exec_()

Когда вы запускаете этот код, сообщение Привет! появляется в вашем терминале один раз в секунду:

Сигнал в вышеуказанном коде – таймер . Мы использовали его .connect (...) Способ указать функцию, которая вызывается при возникновении сигнала. В примере мы использовали встроенную функцию лямбда: Печать («Привет!») . Наш другой звонок Timer.Start (1000) Затем гарантировал, что QT выполняет эту функцию каждые 1000 миллисекунд.

Теперь мы находимся в состоянии полностью реализовать клиент чата. Скопируйте код ниже в файл рядом с вашим Виртуальский каталог, скажи как main.py Отказ Обязательно заполните свое имя сверху, или вы не сможете публиковать сообщения. Затем вы можете запустить чат со следующей командой:

python main.py

Вы сможете увидеть, что другие написали и отправляют свои собственные сообщения. Счастливый чат!:-)

from PySide2.QtCore import *
from PySide2.QtWidgets import *

import requests

name = '' # Enter your name here!
chat_url = 'https://build-system.fman.io/chat'

# GUI:
app = QApplication([])
text_area = QTextEdit()
text_area.setFocusPolicy(Qt.NoFocus)
message = QLineEdit()
layout = QVBoxLayout()
layout.addWidget(text_area)
layout.addWidget(message)
window = QWidget()
window.setLayout(layout)
window.show()

# Event handlers:
def refresh_messages():
    text_area.setHtml(requests.get(chat_url).text)

def send_message():
    requests.post(chat_url, {'name': name, 'message': message.text()})
    message.clear()

# Signals:
message.returnPressed.connect(send_message)
timer = QTimer()
timer.timeout.connect(refresh_messages)
timer.start(1000)

app.exec_()

Теперь мы можем начать наше приложение с помощью команды Python Main.py Отказ Но как мы бежим на чужой компьютере? Особенно, если у них нет Python?

То, что мы хотим, это автономный исполняемый файл, который не требует Python (или что-то еще) для запуска. Процесс создания такого бинарного называется замораживание в питоне.

Специальные библиотеки Python, такие как Pyinstaller, позволяют заморозить приложения. К сожалению, они только получают вам 80% пути. Очень часто вам все равно приходится вручную добавлять или удалять DLL или общие библиотеки. И они не решают базовые задачи, такие как доступ к файлам данных, создание установщиков или автоматических обновлений.

Поэтому мы будем использовать более современную библиотеку под названием FBS. . Он основан на Pyinstaller, но добавляет недостающий 20%. Вы можете установить его через следующую команду:

pip install fbs PyInstaller==3.4

Чтобы начать новый проект FBS, введите:

python -m fbs startproject

Это спрашивает вам несколько вопросов. Вы можете использовать Чат Как имя приложения и ваше имя как автор.

Как только вы сделали это, пожалуйста Скачать этот файл и скопируйте его на SRC/Main/Python/Main.py Отказ Откройте файл с помощью текстового редактора и замените имя по имени. Затем следующая команда запускает чат как раньше:

python -m fbs run

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

python -m fbs freeze

Это замораживает ваш код Python к цели/чату в папке. Вы можете скопировать этот каталог на любой другой компьютер с той же ОС, что и запускает чат там. Разве это не круто?

Вы также можете использовать FBS для создания установщика. Это сделано с помощью команды Python -M FBS установщик :

(В Windows этот шаг требует NSIS быть на пути. На Linux вам нужно FPM .)

Если у вас есть существующее приложение, которое вы хотите преобразовать в FBS, Эта статья может помочь вам. Он написан для PYQT, но одинаково применим к Qt для Python/Pyside. Еще один хороший источник информации – Учебное пособие FBS Отказ

Мы видели выше, как QT для Python можно использовать для создания простого приложения для рабочего стола. Мы использовали базовые виджеты, такие как QTextedit. и QLineEdit. , а также QVBoxLayout организовать их. Сигналы QT давайте сделаем эту динамику GUI: Сначала используя таймер, чтобы извлечь последние сообщения с сервера каждые 1,000 м. И во-вторых, позволяя нам отвечать пользователю, нажав кнопку ENTER, чтобы отправить сообщение. Наконец, мы использовали FBS, чтобы легко создать автономный исполняемый файл и установщик.

Не стесняйтесь добраться до меня в Twitter @m_herrmann, если у вас есть какие-либо вопросы или комментарии!

Этот пост был изначально опубликован здесь .

Оригинал: “https://dev.to/m_herrmann/python-qt-tutorial-create-a-simple-chat-client-cgl”