PyQt QTabWidget в Python — создание виджета вкладок
Вкладки позволяют отображать связанную информацию на отдельных маркированных страницах. Вкладки полезны для разделения сложных интерфейсов на более мелкие страницы, которые легче усваиваются пользователями.
- Что такое PyQt QTabWidget
- Пример PyQt QTabWidget
- Параметры QTabWidget
- Movable
- tabsClosable
- Tab shape
- Tab positions
Что такое 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 в значение True:
tab = QTabWidget(self,movable=True)
Обратите внимание, что вы можете инициализировать перемещаемое свойство при создании виджета вкладки.
Или вы можете использовать метод setMovable() объекта виджета вкладки:
tab.setMovable(True)
tabsClosable
Если tabsClosble имеет значение true, на вкладках будет отображаться кнопка закрытия.
tab = QTabWidget(self,tabsClosable=True)
Или вы можете использовать метод setTabsClosable():
tab.setTabsClosable(True)
При нажатии кнопки закрытия QTabWidget испускает сигнал tabCloseRequested. Если вы хотите закрыть вкладку, вам нужно подключиться к этому сигналу и реализовать код для закрытия соответствующей вкладки.
Tab shape
Вкладка имеет две формы: округлую и треугольную. Округлая форма используется по умолчанию.
Чтобы задать форму вкладки, можно использовать аргумент tabShape при создании нового виджета вкладки:
tab = QTabWidget(self, tabShape=QTabWidget.TabShape.Triangular)
Или вы можете использовать метод setTabShape():
tab.setTabShape(QTabWidget.TabShape.Triangular)
Tab positions
Вкладки могут иметь четыре позиции, определяемые перечислением TabPosition:
- North
- South
- West
- East
Чтобы задать положение вкладки, можно использовать аргумент tabPosition при создании виджета вкладки:
tab = QTabWidget(self, tabPosition=QTabWidget.TabPosition.West)
Или вы можете использовать метод setTabPosition():
tab.setTabPosition(QTabWidget.TabPosition.West)