Читать книгу Программирование на Python3 с PyQt5 - Сергей Николаевич Талипов - Страница 6
ЛЕКЦИЯ 3 – ОСНОВНЫЕ КОМПОНЕНТЫ PYQT5
Оглавление3.1 QWidget и QDialog
Окно
№ | Свойство | Назначение |
Имя окна | ||
Доступность | ||
Размеры окна, запрет изменения размера | ||
Шрифт, размер шрифта | ||
Вид курсора | ||
Заголовок окна | ||
Иконка окна | ||
Модальность окна (только у QDialog) |
self.setWindowTitle('Создание простейшей визуальной программы')
self.setWindowIcon(QtGui.QIcon('images/logo.png'))
class Main(QWidget) или class Main(QDialog)
…
app = QApplication(sys.argv)
window = Main()
window.show()
sys.exit(app.exec_())
3.2 QPushButton
Кнопка
№ | Свойство | Назначение |
Имя компонента | ||
Доступность | ||
Положение компонента и его размеры | ||
Шрифт, размер шрифта | ||
Вид курсора | ||
Стиль рамки | ||
Надпись |
def solve(self):
…
self.btn_solve.clicked.connect(self.solve)
3.3 QLabel
Текстовая метка
№ | Свойство | Назначение |
Имя компонента | ||
Доступность | ||
Положение компонента и его размеры | ||
Шрифт, размер шрифта | ||
Вид курсора | ||
Надпись | ||
Картинка | ||
Масштабирование картинки |
self.label_img.setPixmap(QPixmap('images/main.png'))
self.label_img.setScaledContents(True)
self.label_answer.setText('Ответ: ' + str(format(answer, '.12f')))
print (QtGui.QtextDocument(self.label_answer.text()).toPlainText())
3.4 QLineEdit
Текстовое поле для ввода/вывода
№ | Свойство | Назначение |
Имя компонента | ||
Доступность | ||
Положение компонента и его размеры | ||
Шрифт, размер шрифта | ||
Вид курсора | ||
Стиль рамки | ||
Надпись |
a = self.lineEdit_a.text()
self.lineEdit_a.setText('')
3.5 Практический пример
Вид при использовании QWidget
Вид при использовании QDialog
import sys
from PyQt5 import QtGui
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import *
from PyQt5.uic import loadUi
class Main(QDialog):
def __init__(self):
super(Main, self).__init__()
loadUi('uis/main.ui', self) # загрузка формы в py-скрипт
self.setWindowTitle('Создание простейшей визуальной '
'программы на Python')
self.setWindowIcon(QtGui.QIcon('images/logo.png'))
self.label_img.setPixmap(QPixmap('images/main.png'))
self.label_img.setScaledContents(True)
self.btn_solve.clicked.connect(self.solve) # Связь кнопки с методом
self.btn_clear.clicked.connect(self.clear) # Связь кнопки с методом
self.btn_exit.clicked.connect(self.exit) # Связь кнопки с методом
def solve(self):
a = self.lineEdit_a.text()
b = self.lineEdit_b.text()
x = self.lineEdit_x.text()
if validation_of_data(a, b, x):
a = float(a)
b = float(b)
x = float(x)
if x > 6:
answer = a / x + b / x ** 2
else:
answer = a ** 2 * (x + b)
self.label_answer.setText('Ответ: ' + str(format(answer, '.2f')))
else:
self.label_answer.setText(
'Ошибка!')
def clear(self):
self.lineEdit_a.setText('')
self.lineEdit_b.setText('')
self.lineEdit_x.setText('')
self.label_answer.setText('Ответ: ')
def exit(self):
self.close()
def validation_of_data(a, b, x):
"""
проверяем валидность наших данных, с помощью перехвата исключения
:param a: число, полученное из lineEdit_a
:param b: число, полученное из lineEdit_b
:param x: число, полученное из lineEdit_x
:return: True – прошло валидацию, False – нет
"""
try:
float(a)
float(b)
float(x)
return True
except Exception:
return False
def main():
# каждое приложение должно создать объект QApplication
# sys.argv – список аргументов командной строки
app = QApplication(sys.argv)
window = Main() # базовый класс для всех объектов интерфейса пользователя
window.show() # отобразить окно на экране
sys.exit(app.exec_()) # запуск основного цикла приложения
if __name__ == '__main__':
main()
3.6 Конвертация файла «ui» в скрипт Python
(PyQt5 UI code generator)
pyuic5 name.ui -o name.py
Запускаем из папки с файлом ui в cmd, после чего появляется “py” скрипт в той же папке.