Python PYQT Tabs outside app window [why]
<p>Tabs added before app.exec_() is called look and act as any other tabs u met, though if adding another after the app.exec_() call makes the new tab 'detach' from the main app window. Pic below :)</p>

<p>Why? How can I make it move inside the window?</p>

<pre><code>import threading
import time
import sys

from PyQt5.QtWidgets import QApplication
from PyQt5.QtWidgets import QFormLayout
from PyQt5.QtWidgets import QLineEdit
from PyQt5.QtWidgets import QTabWidget
from PyQt5.QtWidgets import QTextEdit
from PyQt5.QtWidgets import QWidget

class ATry(threading.Thread):
    def __init__(self):
        super().__init__()

    def run(self):
        time.sleep(1)
        anotherTextEdit = QTextEdit()
        anotherLineEdit = QLineEdit()
        anotherLayout = QFormLayout()
        anotherLayout.addRow(anotherTextEdit)
        anotherLayout.addRow(anotherLineEdit)
        anotherTab = QWidget()
        anotherTab.setLayout(anotherLayout)
        md.addTab(anotherTab, "Outside")

app = QApplication(sys.argv)
md = QTabWidget()

aTextEdit = QTextEdit()
aLineEdit = QLineEdit()
layout = QFormLayout()
layout.addRow(aTextEdit)
layout.addRow(aLineEdit)
thisTab = QWidget()
thisTab.setLayout(layout)
md.addTab(thisTab, "Inside")

a = ATry()
a.start()
md.show()

app.exec_()
</code></pre>

<p><a href="http://i.stack.imgur.com/3gXA6.png" rel="nofollow">Screen describing the problem</a></p>

<p>It works with QTimer or signals:</p>

<pre><code>import sys
import time

from PyQt5.QtCore import QObject
from PyQt5.QtCore import QThread
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWidgets import QFormLayout
from PyQt5.QtWidgets import QLineEdit
from PyQt5.QtWidgets import QTabWidget
from PyQt5.QtWidgets import QTextEdit
from PyQt5.QtWidgets import QWidget


class ATry(QThread):
    def __init__(self, pointer):
        super().__init__()
        self.pointer = pointer

    def run(self):
        time.sleep(2)
        self.pointer.emit()


def addTheTab():
    anotherTextEdit = QTextEdit()
    anotherLineEdit = QLineEdit()
    anotherLayout = QFormLayout()
    anotherLayout.addRow(anotherLineEdit)
    anotherLayout.addRow(anotherTextEdit)
    anotherTab = QWidget()
    anotherTab.setLayout(anotherLayout)
    md.addTab(anotherTab, "Whatever")


class MyQObject(QObject):
    trigger = pyqtSignal()

    def __init__(self):
        super().__init__()

    def connect_and_get_trigger(self):
        self.trigger.connect(addTheTab)
        return self.trigger

    def getGFX(self):
        app = QApplication(sys.argv)
        md = QTabWidget()
        md.show()
        return app, md


obj = MyQObject()
app, md = obj.getGFX()
addTheTab()
a = ATry(obj.connect_and_get_trigger())
a.start()

# timer = QTimer()
# timer.timeout.connect(proba)
# timer.start(3000)

app.exec_()
</code></pre>

python python-3.x user-interface pyqt pyqt5