Прошло время и многое изменилось. Теперь доступен Python 3.9, Eclipse 2021-6, Pydev 8.2.0. и пакет PyQt6-он тесно связан с оригинальным пакетом Qt v6.
Я рекомендую обновить Python на версию 3.9. С сайта Eclipse.org скачать установщик и скачать последную версию для разработчиков java с предустановленной JVM, затем войти в eclipse и загрузить PyDev через Eclipse Marketplace.
В Win 10 запустике командную строку от администратора, в ней наберите команду pip install PyQt6, PyQt6-tools.
Затем входите в Eclipse, в меню Windows выбираете Preference и затем Pydev и interpretators -> Python.
В открывшемся диалоге надо прописать путь к программе Python. Затем нажимаете Apply and Close.
В правом верхнем углу нажмите значок Open Perspectives и в открывшемся окне выберите Pydev.
Вы можете начинать работать с Python и PyQt6 в Eclipse.
Классы PyQt5 разделены на несколько модулей, включая следующие:
- QtCore
- QtGui
- QtWidgets
- QtMultimedia
- QtBluetooth
- QtNetwork
- QtPositioning
- Enginio
- QtWebSockets
- QtWebKit
- QtWebKitWidgets
- QtXml
- QtSvg
- QtSql
- QtTest
- QtGui содержит классы для интеграции систем окон, обработки событий, 2D-графики, базовой обработки изображений, шрифтов и текста.
- Модуль QtWidgets содержит классы, которые обеспечивают набор UI-элементов для создания классических пользовательских интерфейсов.
- QtMultimedia содержит классы для управления мультимедиа-содержимым, а также API для доступа к камере или функциональности радио.
- Модуль QtBluetooth содержит классы для поиска устройств, соединения и взаимодействия с ними.
- Модуль QtNetwork содержит классы для сетевого программирования. Эти классы облегчают работу с клиентами и серверами TCP/IP и UDP, делая сетевое программирование более легким и адаптивным.
- QtPositioning содержит классы для определения местоположения с использованием всевозможных источников, таких как спутники, Wi-Fi или текстовые файлы.
- Модуль Enginio реализует клиентскую библиотеку для организации доступа к облачным сервисам Qt – Manaded Application Runtime.
- Модуль QtWebSockets содержит классы, которые реализуют протокол WebSocket.
- QtWebKit содержит классы для реализации веб-браузера, основанного на библиотеке WebKit2.
- Модуль QtWebKitWidgets содержит классы для WebKit1, основанные на реализации веб-браузера, для использования в приложениях, базирующихся на QtWidgets.
- QtXml содержит классы для работы с XML файлами. Этот модуль предоставляет реализацию сразу для двух API: SAX и DOM.
- Модуль QtSvg содержит классы для отображения содержимого SVG-файлов. Scalable Vector Graphics (SVG) – это язык для описания двумерной графики и графических приложений в XML.
- Модуль QtSql предоставляет классы для работы с базами данных.
- QtTest содержит функции, которые дают возможность модульного тестирования PyQt-приложений.
Различия PyQt4 и PyQt5
PyQt5 не имеет обратной совместимости с PyQt4; существует несколько значительных изменений в PyQt5. Тем не менее, не так сложно приспособить старый код к новой библиотеке. Среди прочих, существуют следующие различия:- Модули Python были реорганизованы. Некоторые модули были исключены (QtScript), другие были разделены на субмодули (QtGui, QtWebKit).
- Новые модули представлены в виде QtBluetooth, QtPositioning или Enginio.
- PyQt5 поддерживает только новый стиль обработки сигналов и слотов. Вызовы вида SIGNAL() или SLOT() больше не поддерживаются.
- PyQt5 не поддерживает части Qt API, которые помечены как устаревшие в Qt v5.0.
Рассмотрим доступ к базе данных SQLITE через модуль PyQt5 - QtSql.
Источник злесь https://www.tutorialspoint.com/pyqt/pyqt_database_handling.htmДля начала создадим простую базу sqlite:
from PyQt5 import QtSql
from PyQt5.QtWidgets import QMessageBox, QApplication, qApp
def createDB():
db = QtSql.QSqlDatabase.addDatabase('QSQLITE')
db.setDatabaseName('sports.db')
if not db.open():
QMessageBox.critical(None, qApp.tr("Cannot open database"),
qApp.tr("Unable to establish a database connection.\n"
"This example needs SQLite support. Please read "
"the Qt SQL driver documentation for information "
"how to build it.\n\n" "Click Cancel to exit."),
QMessageBox.Cancel)
return False
query = QtSql.QSqlQuery()
query.exec_("create table sportsmen(id int primary key, "
"firstname varchar(20), lastname varchar(20))")
query.exec_("insert into sportsmen values(101, 'Roger', 'Federer')")
query.exec_("insert into sportsmen values(102, 'Christiano', 'Ronaldo')")
query.exec_("insert into sportsmen values(103, 'Ussain', 'Bolt')")
query.exec_("insert into sportsmen values(104, 'Sachin', 'Tendulkar')")
query.exec_("insert into sportsmen values(105, 'Saina', 'Nehwal')")
return True
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
createDB()
---------------------------------------
Теперь рассмотрим программу просмотра и модификации этой базы данных.
В программе вставляем импорт:
from PyQt5 import QtSql
Создаем объект типа база данных к SQLITE:
db = QtSql.QSqlDatabase.addDatabase('QSQLITE')
Теперь надо задать базу данных, которую собираемся обрабатывать:
db.setDatabaseName('sports.db')
В кдассе QSqlDatabase есть еще следующие методы
Методы и описание | |
---|---|
1 | setDatabaseName Устанавливает имя базы данных |
2 | setHostName Устанавливает имя хоста, на котором находится ваша база |
3 | setUserName Залает имя пользователя для связи |
4 | setPassword Задает пароль для связи |
5 commit | Заканчивает транзакцию, в случае успеха возвращает true |
6 | rollback Откатывает назад транзакцию |
7 | close Закрывает соединение |
Доступ к данным в таблице проще всего получить через определение модели данных:
model = QtSql.QSqlTableModel()
Теперь, в модели определим некоторые летали:
Имя таблицы
model.setTable('sportsmen')
Режим внесения изменений при просмотре
model.setEditStrategy(QtSql.QSqlTableModel.OnFieldChange)
Использование метода выбора
model.select()
Назначаем наименование столбцов таблицы
model.setHeaderData(0, QtCore.Qt.Horizontal, "ID")
model.setHeaderData(1, QtCore.Qt.Horizontal, "First name")
model.setHeaderData(2, QtCore.Qt.Horizontal, "Last name")
Для визуального просмотра таблицы создаем объект view:
view = QTableView()
Класс QTableView находится в модуле PyQt5.QtWidgets. В view определяем модель и заголовок:
view.setModel(model)
view.setWindowTitle("title")
Затем организуется диалог вида
dlg = QDialog()
layout = QVBoxLayout()
И уже в этот layout добавляется view:
layout.addWidget(view)
-------------------------------------------------------------------------
Полный пример программы:
import sys
from PyQt5 import QtCore, QtSql, QtGui
from PyQt5.QtWidgets import QMessageBox, QApplication, QTableView, QDialog, QVBoxLayout, QPushButton, qApp
def initializeModel(model):
model.setTable('sportsmen')
model.setEditStrategy(QtSql.QSqlTableModel.OnFieldChange)
model.select()
model.setHeaderData(0, QtCore.Qt.Horizontal, "ID")
model.setHeaderData(1, QtCore.Qt.Horizontal, "First name")
model.setHeaderData(2, QtCore.Qt.Horizontal, "Last name")
def createView(title, model):
view = QTableView()
view.setModel(model)
view.setWindowTitle(title)
return view
def addrow():
print (model.rowCount())
ret = model.insertRows(model.rowCount(), 1)
print (ret)
def findrow(i):
delrow = i.row()
if __name__ == '__main__':
app = QApplication(sys.argv)
db = QtSql.QSqlDatabase.addDatabase('QSQLITE')
db.setDatabaseName('sports.db')
model = QtSql.QSqlTableModel()
delrow = -1
initializeModel(model)
view1 = createView("Table Model (View 1)", model)
view1.clicked.connect(findrow)
dlg = QDialog()
layout = QVBoxLayout()
layout.addWidget(view1)
button = QPushButton("Add a row")
button.clicked.connect(addrow)
layout.addWidget(button)
btn1 = QPushButton("del a row")
btn1.clicked.connect(lambda: model.removeRow(view1.currentIndex().row()))
layout.addWidget(btn1)
dlg.setLayout(layout)
dlg.setWindowTitle("Database Demo")
dlg.show()
sys.exit(app.exec_())
В Pyqt5 существует три вида приложений:
from PyQt5.QtCore import QCoreApplication
В нем вы строите консольные приложения;
from PyQt5.QtGui import QGuiApplication
В нем вы строите диалоговые приложения без использования библиотеки QtWidgets;
from PyQt5.QtWidgets import QApplication
В нем вы строите диалоговые приложения с использованием библиотеки QtWidgets.
---
Начиная с Qt 5.5 в Python3 окружении появился отдельный модуль PyQtWebEngine вместо класса PyQt5.QtWebKit. Устанавливать его нужно отдельной командой
pip install PyQtWebEngine
PyQtWebEngine - это набор привязок Python для библиотек Qt WebEngine компании Qt. Привязки находятся поверх PyQt и реализованы в виде набора из трех модулей. До версии 5.12 эти привязки были частью самого PyQt.
---
Для проверки версий установленных пакетов используйте команду pip list из командной строки. Советую запускать от имени Администратора.
Для проверки появления обновлений используйте команду pip list -o.
Для обновления модуля используйте команду pip install -U имя модуля.
У меня в Python3 стоят модули:
PyQt5 5.15.1
pyqt5-tools 5.15.1.1.7.5
PyQtChart 5.15.1
PyQtWebEngine 5.15.1
pyqt5-tools 5.15.1.1.7.5
PyQtChart 5.15.1
PyQtWebEngine 5.15.1
Обратите внимание - первые три цифры версии должны совпадать.
Для Python я использую IDE Eclipse. Скачиваю последнюю версию для разработчиков Java и устанавливаю. На компьютере стоит уже Jdk14. Его я скачал с сайта Oracle. Запускаем Eclipse и в HELP находим Eclipse Marketplace, в строке find вводим Pydev и нажимаем значок поиска. Первая найденная строка будет Pydev, в правом нижнем углу полосы нажимаем кнопку Install. Перезапускаем Eclipse и переходим к насиройке Pydev.
В кнопке Windows внизу нажимаем Preferences. В открывшемся окне, в левом вертикальном списке нажимаем Pydev. Открывается список, относящийся к настройке Pydev. В этом списке выбираем строку Interpreters. Затем выбираем Python Interpreter. В верхнем окне выбираем место, где установлен Python3.
Сначала вышел на tutorialspoint, после на ваш пост. Попробовал запустить вашу версию. Выдает ошибку - ImportError: cannot import name QtSql. С этой ошибки у меня и пошло странствие по интернету. В чем дело не соображу. Модуль qtsql вызывается из терминала, а из программы не хочет. Как с этим бороться? Это одно. Другое. Подписчики на блогспоте медленно набираются. Взаимная подписка вами поддерживается?
ОтветитьУдалить