Python PYQT Tabs outside app window [why]
Question: 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 :)

Why? How can I make it move inside the window?

    
    
    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_()
    

[Screen describing the problem](http://i.stack.imgur.com/3gXA6.png)


Answer: It works with QTimer or signals:

    
    
    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_()
    

