Поиск…


замечания

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

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

Установка или настройка

  1. Установите Anaconda (встроенный PyQt5), особенно для пользователей Windows.
  2. Интегрируйте QtDesigner и QtUIConvert в PyCharm (внешние инструменты)
    • Откройте Settings PyCharm> Tools > External Tools
    • Создать инструмент (QtDesigner) - используется для редактирования файлов * .ui
    • Create Tool (PyUIConv) - используется для преобразования * .ui в * .py
  3. Написать демо
    • new window.ui с помощью внешнего инструмента (QtDesigner)
    • конвертировать в window.py с помощью внешнего инструмента (PyUIConv)
    • демонстрация
      import sys
      from PyQt5.QtWidgets import QApplication,QMainWindow
      from window import Ui_MainWindow
      
      if __name__ == '__main__':
          app = QApplication(sys.argv)
          w = QMainWindow()
          ui = Ui_MainWindow()
          ui.setupUi(w)
          w.show()
          sys.exit(app.exec_())
      

Привет, мир

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

import sys
from PyQt5.QtWidgets import QApplication, QWidget


if __name__ == '__main__':
    
    app = QApplication(sys.argv)

    w = QWidget()
    w.resize(250, 150)
    w.move(300, 300)
    w.setWindowTitle('Hello World')
    w.show()
    
    sys.exit(app.exec_())

Анализ

app = QtWidgets.QApplication(sys.argv)

Каждое приложение PyQt5 должно создать объект приложения. Параметр sys.argv представляет собой список аргументов из командной строки. Сценарии Python можно запускать из оболочки.

w = QWidget()

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

w.resize(250, 150)

Метод resize() изменяет resize() виджета. Он имеет ширину 250 пикселей и высоту 150 пикселей.

w.move(300, 300)

Метод move() перемещает виджет в положение на экране при x = 300, y = 300 координат.

w.setWindowTitle('Hello World')

Здесь мы устанавливаем заголовок для нашего окна. Заголовок отображается в заголовке.

w.show()

Метод show() отображает виджет на экране. Виджет сначала создается в памяти, а затем отображается на экране.

sys.exit(app.exec_())

Наконец, мы вводим mainloop приложения. Обработка событий начинается с этого момента. Mainloop принимает события из оконной системы и отправляет их в виджеты приложения. Mainloop заканчивается, если мы вызываем метод exit() или главный виджет уничтожается. Метод sys.exit() обеспечивает чистый выход. Окружающая среда будет проинформирована о том, как приложение закончилось.

Метод exec_() имеет знак подчеркивания. Это потому, что exec является ключевым словом Python. И, таким образом, вместо этого использовался exec_() .

Добавление значка приложения

import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QIcon


class Example(QWidget):
    
    def __init__(self):
        super().__init__()
        
        self.initUI()
        
        
    def initUI(self):
        
        self.setGeometry(300, 300, 300, 220)
        self.setWindowTitle('Icon')
        self.setWindowIcon(QIcon('web.png'))        
    
        self.show()
        
        
if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_()) 

Анализ

Аргументы функции в Python

В Python пользовательские функции могут принимать четыре разных типа аргументов.

  1. Аргументы по умолчанию:
  • Определение функции

    def defaultArg( name, msg = "Hello!"):

  • Вызов функции

    defaultArg( name)

  1. Необходимые аргументы:
  • Определение функции

    def requiredArg (str,num):

  • Вызов функции:

    requiredArg ("Hello",12)

  1. Аргументы ключевого слова:
  • Определение функции

    def keywordArg( name, role ):

  • Вызов функции

    keywordArg( name = "Tom", role = "Manager")

    или же

    keywordArg( role = "Manager", name = "Tom")

  1. Переменная количество аргументов:
  • Определение функции

    def varlengthArgs(*varargs):

  • Вызов функции

    varlengthArgs(30,40,50,60)

class Example(QWidget):
    
    def __init__(self):
        super().__init__()
        ...

Три важные вещи в объектно-ориентированном программировании - это классы, данные и методы. Здесь мы создаем новый класс под названием Example . Класс Example наследуется от класса QWidget . Это означает, что мы вызываем два конструктора: первый для класса Example и второй для унаследованного класса. Метод super() возвращает родительский объект класса Example и мы вызываем его конструктор. Переменная self относится к самому объекту.

Почему мы использовали __init__ ?

Проверь это:

class A(object):
    def __init__(self):
        self.lst = []

class B(object):
    lst = []

и теперь попробуйте:

>>> x = B()
>>> y = B()
>>> x.lst.append(1)
>>> y.lst.append(2)
>>> x.lst
[1, 2]
>>> x.lst is y.lst
True

и это:

>>> x = A()
>>> y = A()
>>> x.lst.append(1)
>>> y.lst.append(2)
>>> x.lst
[1]
>>> x.lst is y.lst
False

Означает ли это, что x в классе B устанавливается до создания экземпляра?

Да, это атрибут класса (он делится между экземплярами). Хотя в классе A это атрибут экземпляра.

self.initUI() 

Создание GUI делегируется initUI() .

self.setGeometry(300, 300, 300, 220)
self.setWindowTitle('Icon')
self.setWindowIcon(QIcon('web.png'))  

Все три метода были унаследованы от класса QWidget . setGeometry() выполняет две функции: находит окно на экране и задает его размер. Первыми двумя параметрами являются положения x и y окна. Третья - ширина, а четвертая - высота окна. Фактически, он объединяет методы resize() и move() одним способом. Последний метод устанавливает значок приложения. Для этого мы создали объект QIcon . QIcon получает путь к нашему значку, который будет отображаться.

if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

Создаются объекты приложения и примера. Запускается основной цикл.

Отображение всплывающей подсказки

import sys
from PyQt5.QtWidgets import (QWidget, QToolTip, 
    QPushButton, QApplication)
from PyQt5.QtGui import QFont    


class Example(QWidget):
    
    def __init__(self):
        super().__init__()
        
        self.initUI()
        
        
    def initUI(self):
        
        QToolTip.setFont(QFont('SansSerif', 10))
        
        self.setToolTip('This is a <b>QWidget</b> widget')
        
        btn = QPushButton('Button', self)
        btn.setToolTip('This is a <b>QPushButton</b> widget')
        btn.resize(btn.sizeHint())
        btn.move(50, 50)       
        
        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('Tooltips')    
        self.show()
        
        
if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

Анализ

QToolTip.setFont(QFont('SansSerif', 10))

Этот статический метод устанавливает шрифт, используемый для визуализации всплывающих подсказок. Мы используем шрифт SansSerif размером 10 пикселей.

self.setToolTip('This is a <b>QWidget</b> widget')

Чтобы создать всплывающую подсказку, мы вызываем метод setTooltip() . Мы можем использовать форматирование форматированного текста.

btn = QPushButton('Button', self)
btn.setToolTip('This is a <b>QPushButton</b> widget')

Мы создаем виджет кнопки и устанавливаем для него всплывающую подсказку.

btn.resize(btn.sizeHint())
btn.move(50, 50) 

Кнопка изменяется и перемещается в окне. Метод sizeHint() дает рекомендуемый размер для кнопки.

Пакет вашего проекта в excutable / installer

cx_Freeze - инструмент может упаковать ваш проект в excutable / installer

  • после установки его на pip, чтобы упаковать demo.py , нам нужно setup.py ниже.
import sys
from cx_Freeze import setup, Executable

# Dependencies are automatically detected, but it might need fine tuning.
build_exe_options = {
    "excludes": ["tkinter"],
    "include_files":[('./platforms','./platforms')] # need qwindows.dll for qt5 application
}

# GUI applications require a different base on Windows (the default is for a
# console application).
base = None
if sys.platform == "win32":
    base = "Win32GUI"

setup(  name = "demo",
        version = "0.1",
        description = "demo",
        options = {"build_exe": build_exe_options},
        executables = [Executable("demo.py", base=base)])
  • затем построить
python .\setup.py build
  • затем dist
python .\setup.py bdist_msi


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow