Добавление вкладки в QTabWidget при нажатии кнопки

Рейтинг: 1Ответов: 1Опубликовано: 07.02.2023

Хотелось бы иметь возможность создавать новые вкладки в режиме реального времени.
Для этого добавила кнопку Add tab, однако при нажатии новая вкладка не добавляется.

Помимо этого, при открытии окна вкладки спокойно двигаются, а после нажатия кнопки перестают перемещаться.

Помогите, пожалуйста решить проблему.

import sys 
from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QTabWidget, QPushButton


class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        main_layout = QHBoxLayout()
        self.setLayout(main_layout)
        self.setGeometry(250, 250, 700, 500)

        self.tab = QTabWidget(movable=True)
        personal_page = QWidget(self)
        contact_page = QWidget(self)

        self.tab.addTab(personal_page, "tab 1")
        self.tab.addTab(contact_page, "tab 2")
        main_layout.addWidget(self.tab)
        self.btn = QPushButton("Add tab")
        self.btn.clicked.connect(self.add_tab)
        main_layout.addWidget(self.btn)


    def add_tab(self):
        tab = QWidget(self)
        self.tabWidget.addTab(tab, "tab")


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

Ответы

▲ 0Принят

Попробуйте так:

import sys 
from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, \
    QTabWidget, QPushButton, QLabel
from PyQt5.QtCore import Qt


class Widget(QWidget):
    def __init__(self, page):
        super().__init__()
        
        self.label = QLabel(f'Page {page}', alignment = Qt.AlignCenter)
        self.label.setStyleSheet("QLabel {color: #1E5F74; font: 20pt;}")
        
        layout = QHBoxLayout(self)
        layout.addWidget(self.label)


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

        self.tab = QTabWidget(movable=True)
        personal_page = QWidget(self)
        contact_page = QWidget(self)

        self.tab.addTab(personal_page, "tab 1")
        self.tab.addTab(contact_page, "tab 2")
        
        self.btn = QPushButton("Add tab")
        self.btn.clicked.connect(self.add_tab)
        
        main_layout = QHBoxLayout(self)
        main_layout.addWidget(self.tab)
        main_layout.addWidget(self.btn)

        self._page = 2

    def add_tab(self):
        self._page += 1
        tab = Widget(self._page)      # QWidget(self)

#        self.tabWidget.addTab(tab, "tab")                  # -   tabWidget
        self.tab.addTab(tab, f"tab {self._page}")           # +++ tab


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.resize(700, 500)
    window.show()
    sys.exit(app.exec())

введите сюда описание изображения