PyQt QTabWidget в Python — создание виджета вкладок

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

Содержание

Что такое PyQt QTabWidget

Для создания виджета вкладки используется класс QTabWidget в Python. Шаги для использования QTabWidget следующие:

  • Сначала создайте объект QTabWidget:
tab = QTabWidget()
layout.addWidget(tab)
  • Во-вторых, создайте страницу, используя объект QWidget в качестве контейнера, и добавьте дочерние виджеты в QWidget:
page = QWidget(tab)
page_layout = QGridLayout()
page.setLayout(page_layout)
  • В-третьих, добавьте страницу в виджет вкладки с помощью метода addTab():
tab.addTab(page,'Tab title')
  • Наконец, повторите второй и третий шаги, чтобы добавить больше страниц на вкладку.

Пример PyQt QTabWidget

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

import sys
from PyQt6.QtWidgets import QApplication, QWidget,  QFormLayout, QGridLayout, QTabWidget, QLineEdit, QDateEdit, QPushButton
from PyQt6.QtCore import Qt


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

        self.setWindowTitle('PyQt QTabWidget')

        main_layout = QGridLayout(self)
        self.setLayout(main_layout)

        # create a tab widget
        tab = QTabWidget(self)

        # personal page
        personal_page = QWidget(self)
        layout = QFormLayout()
        personal_page.setLayout(layout)
        layout.addRow('First Name:', QLineEdit(self))
        layout.addRow('Last Name:', QLineEdit(self))
        layout.addRow('DOB:', QDateEdit(self))

        # contact pane
        contact_page = QWidget(self)
        layout = QFormLayout()
        contact_page.setLayout(layout)
        layout.addRow('Phone Number:', QLineEdit(self))
        layout.addRow('Email Address:', QLineEdit(self))

        # add pane to the tab widget
        tab.addTab(personal_page, 'Personal Info')
        tab.addTab(contact_page, 'Contact Info')

        main_layout.addWidget(tab, 0, 0, 2, 1)
        main_layout.addWidget(QPushButton('Save'), 2, 0,
                              alignment=Qt.AlignmentFlag.AlignLeft)
        main_layout.addWidget(QPushButton('Cancel'), 2, 0,
                              alignment=Qt.AlignmentFlag.AlignRight)

        self.show()


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

Выход:

Пример создания виджета вкладки с двумя страницами

Как это работает (мы сосредоточимся только на построении виджета вкладки).

  • Сначала создайте виджет вкладки:
tab = QTabWidget(self)
  • Далее создайте страницу с помощью QWidget и задайте для нее макет QFormLayout:
personal_page = QWidget(self)
layout = QFormLayout()
personal_page.setLayout(layout)
  • Затем добавьте виджеты QLineEdit в виджет person_page:
layout.addRow('First Name:', QLineEdit(self))
layout.addRow('Last Name:', QLineEdit(self))
layout.addRow('DOB:', QDateEdit(self))
  • После этого создайте новую страницу, содержащую поля для контактной информации:
contact_page = QWidget(self)
layout = QFormLayout()
contact_page.setLayout(layout)
layout.addRow('Phone Number:', QLineEdit(self))
layout.addRow('Email Address:', QLineEdit(self))
  • Наконец, добавьте страницы на вкладку с помощью метода add_tab():
tab.addTab(personal_page, 'Personal Info')
tab.addTab(contact_page, 'Contact Info')

Параметры QTabWidget

QTabWidget имеет несколько примечательных опций.

Movable

Пример параметра Movable

Чтобы сделать вкладку подвижной, установите свойство movable в значение True:

tab = QTabWidget(self,movable=True)

Обратите внимание, что вы можете инициализировать перемещаемое свойство при создании виджета вкладки.

Или вы можете использовать метод setMovable() объекта виджета вкладки:

tab.setMovable(True)

tabsClosable

Если tabsClosble имеет значение true, на вкладках будет отображаться кнопка закрытия.

tab = QTabWidget(self,tabsClosable=True)

Параметр tabsClosable

Или вы можете использовать метод setTabsClosable():

tab.setTabsClosable(True)

При нажатии кнопки закрытия QTabWidget испускает сигнал tabCloseRequested. Если вы хотите закрыть вкладку, вам нужно подключиться к этому сигналу и реализовать код для закрытия соответствующей вкладки.

Tab shape

Вкладка имеет две формы: округлую и треугольную. Округлая форма используется по умолчанию.

Чтобы задать форму вкладки, можно использовать аргумент tabShape при создании нового виджета вкладки:

tab = QTabWidget(self, tabShape=QTabWidget.TabShape.Triangular)

Или вы можете использовать метод setTabShape():

tab.setTabShape(QTabWidget.TabShape.Triangular)

PyQt QTabWidget TabShape

Tab positions

Вкладки могут иметь четыре позиции, определяемые перечислением TabPosition:

  • North
  • South
  • West
  • East

Чтобы задать положение вкладки, можно использовать аргумент tabPosition при создании виджета вкладки:

tab = QTabWidget(self, tabPosition=QTabWidget.TabPosition.West)

Или вы можете использовать метод setTabPosition():

tab.setTabPosition(QTabWidget.TabPosition.West)
Похожие посты
Добавить комментарий

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