PyQt QWidget в Python — хранение и размещение виджетов

QWidget — это базовый класс всех остальных виджетов.

Знакомство с PyQt QWidget

QWidget — это пустая область для хранения других виджетов. Поэтому он может быть использован как контейнер для организации дочерних виджетов в Python.

QWidget похож на Frame в Tkinter для размещения других виджетов.

Ниже показано, как создать объект QWidget внутри главного окна или родительского виджета:

widget = QWidget(parent)

Родителmcrbv может быть объект главного окна или родительский объект виджета, к которому принадлежит объект QWidget.

Предоставление родительского виджета в качестве аргумента QWidget гарантирует, что дочерние виджеты будут удалены сборщиком мусора одновременно с родительским виджетом, и ограничивает его видимость только родительским виджетом.

Пример с PyQt QWidget

Следующая программа показывает, как использовать QWidget в качестве контейнера других виджетов:

import sys
from PyQt6.QtWidgets import QApplication, QWidget,  QLineEdit,  QFormLayout,  QHBoxLayout


class MainWindow(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.setWindowTitle('PyQt Widget Demo')

        # create an input pane
        layout = QHBoxLayout()
        self.setLayout(layout)

        # person pane
        person_pane = QWidget(self)
        form_layout = QFormLayout()
        person_pane.setLayout(form_layout)
        form_layout.addRow('First Name:', QLineEdit(person_pane))
        form_layout.addRow('Last Name:', QLineEdit(person_pane))
        form_layout.addRow('Date of Birth:', QLineEdit(person_pane))
        form_layout.addRow('Email Address:', QLineEdit(person_pane))
        form_layout.addRow('Phone Number:', QLineEdit(person_pane))
        layout.addWidget(person_pane)

        # address pane
        address_pane = QWidget(self)
        form_layout = QFormLayout()
        address_pane.setLayout(form_layout)
        form_layout.addRow('Street:', QLineEdit(address_pane))
        form_layout.addRow('City:', QLineEdit(address_pane))
        form_layout.addRow('State/Province:', QLineEdit(address_pane))
        form_layout.addRow('Zip Code:', QLineEdit(address_pane))
        form_layout.addRow('Country:', QLineEdit(address_pane))
        layout.addWidget(address_pane)

        # show the window
        self.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    sys.exit(app.exec())

Как это работает.

  • Сначала установите макет главного окна как QHBoxLayout:
layout = QHBoxLayout()
self.setLayout(layout)
  • Во-вторых, создайте виджет как контейнер(person_pane), который использует макет формы и добавляет другие виджеты в контейнер:
person_pane = QWidget(self)
form_layout = QFormLayout()
person_pane.setLayout(form_layout)
form_layout.addRow('First Name:', QLineEdit(person_pane))
form_layout.addRow('Last Name:', QLineEdit(person_pane))
form_layout.addRow('Date of Birth:', QLineEdit(person_pane))
form_layout.addRow('Email Address:', QLineEdit(person_pane))
form_layout.addRow('Phone Number:', QLineEdit(person_pane))
  • В-третьих, создайте еще один виджет в качестве контейнера(address_pane), который также использует макет формы и добавляет другие виджеты в контейнер:
address_pane = QWidget(self)
form_layout = QFormLayout()
address_pane.setLayout(form_layout)
form_layout.addRow('Street:', QLineEdit(address_pane))
form_layout.addRow('City:', QLineEdit(address_pane))
form_layout.addRow('State/Province:', QLineEdit(address_pane))
form_layout.addRow('Zip Code:', QLineEdit(address_pane))
form_layout.addRow('Country:', QLineEdit(address_pane))
  • Наконец, добавьте виджет в главное окно:
layout.addWidget(person_pane)
layout.addWidget(address_pane)
Похожие посты
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *