import sys

import PyQt6.sip as sip
from PyQt6.QtCore import QObject, qVersion, Qt
from PyQt6.QtGui import QKeySequence
from PyQt6.QtWidgets import QApplication,QWidget,QMainWindow,QPlainTextEdit


test_ptr = 0


# Avoid repr on QObject, which may crash
def format_obj(o):
    addr = hex(id(o))
    typeS = type(o).__qualname__
    return f" {typeS}/id={addr}"


class Window(QMainWindow):
    def __init__(self):
        global test_ptr
        super().__init__()
        mb = self.menuBar()
        file_menu = mb.addMenu("File")
        file_menu.addAction("Quit", QKeySequence.StandardKey.Quit, self.close)
        pe = QPlainTextEdit()
        self.setCentralWidget(pe)
        # Find an internal child that does not have a parent relationship.
        for c in self.findChildren(QWidget):
            on = c.objectName()
            if on == "qt_menubar_ext_button":
                 print(f'\nwrapping "{on}", {c.metaObject().className()}')
                 test_ptr = sip.unwrapinstance(c)
                 break


if __name__ == '__main__':    
    print('Python {}.{}'.format(sys.version_info[0], sys.version_info[1]))
    t = "PyQt " + qVersion()
    print(t)

    app = QApplication([])
    win = Window()
    win.setWindowTitle(t)

    print("\n\ntest_ptr=", hex(test_ptr))
    wrapped_widget = sip.wrapinstance(test_ptr, QObject)
    print(sip.dump(wrapped_widget))
    win.show()
    sys.exit(app.exec())


