79690497

Date: 2025-07-04 16:59:59
Score: 0.5
Natty:
Report link

The solution by @Avaris worked great for me. Since I am working with PySide6 I had to make some minor updates to imports and Qt references, mainly moving items from QtGUI to QtWidgets. Posted below is @Avaris' code updated to work with PySide6.

# !/usr/bin/env python
# -.- coding: utf-8 -.-
import sys
from PySide6 import QtCore
from PySide6.QtWidgets import (
    QApplication,
    QWidget,
    QHBoxLayout,
    QPushButton,
    QTabWidget,
    QVBoxLayout,
)


class Tab(QWidget):
    popOut = QtCore.Signal(QWidget)
    popIn = QtCore.Signal(QWidget)

    def __init__(self, parent=None):
        super(Tab, self).__init__(parent)

        popOutButton = QPushButton("Pop Out")
        popOutButton.clicked.connect(lambda: self.popOut.emit(self))
        popInButton = QPushButton("Pop In")
        popInButton.clicked.connect(lambda: self.popIn.emit(self))

        layout = QHBoxLayout(self)
        layout.addWidget(popOutButton)
        layout.addWidget(popInButton)


class Window(QWidget):
    def __init__(self, parent=None):
        super(Window, self).__init__()

        self.button = QPushButton("Add Tab")
        self.button.clicked.connect(self.createTab)
        self._count = 0
        self.tab = QTabWidget()
        layout = QVBoxLayout(self)
        layout.addWidget(self.button)
        layout.addWidget(self.tab)

    def createTab(self):
        tab = Tab()
        tab.setWindowTitle("%d" % self._count)
        tab.popIn.connect(self.addTab)
        tab.popOut.connect(self.removeTab)
        self.tab.addTab(tab, "%d" % self._count)
        self._count += 1

    def addTab(self, widget):
        if self.tab.indexOf(widget) == -1:
            widget.setWindowFlags(QtCore.Qt.Widget)
            self.tab.addTab(widget, widget.windowTitle())

    def removeTab(self, widget):
        index = self.tab.indexOf(widget)
        if index != -1:
            self.tab.removeTab(index)
            widget.setWindowFlags(QtCore.Qt.Window)
            widget.show()


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

    w = Window()
    w.show()

    sys.exit(app.exec_())
Reasons:
  • Long answer (-1):
  • Has code block (-0.5):
  • User mentioned (1): @Avaris
  • User mentioned (0): @Avaris'
  • Low reputation (1):
Posted by: maylinnp