Python Forum
[PyQt] remove widgets of a layout - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: GUI (https://python-forum.io/forum-10.html)
+--- Thread: [PyQt] remove widgets of a layout (/thread-25544.html)



remove widgets of a layout - catlessness - Apr-02-2020

i have some problem deleting widgets from the layout:
I used the removeItem() function but the widgets are still there:
def clearlayout(layout):
    for i in reversed(range(layout.count())):
        print(layout.itemAt(i))
        layout.itemAt(i).setParent(None)
        layout.removeItem(layout.itemAt(i))
        layout.itemAt(i).show()
the files are here:
https://1drv.ms/u/s!Ag-Rb-LqQZYuiB0SfkDARk0AF7-s?e=1zKCKZ
(GUI.py is the executable file)

when you are running the 'GUI.py' you need to delete or change the cmd code part:
#Convert ui to py with PowerShell and reload##########################################
command1='cd \\\\filestore.soton.ac.uk\\users\\jy1u18\\mydesktop\\QT'
command2='pyuic5 try.ui -o first.py'
powershellcmd=subprocess.Popen(['powershell.exe',command1],stdout=sys.stdout)
powershellcmd.communicate()
powershellcmd=subprocess.Popen(['powershell.exe',command2],stdout=sys.stdout)
powershellcmd.communicate()
importlib.reload(first)
######################################################################################
the code is not complete yet.
I want to change the labels and lineedits shown in the layout when choosing different circuits from the menubar 'circuits'
the code is not complete yet. only 'C' and 'R' are available. 'C' only run the clearlayout function 'R' runs the function and add new widgets onto it.


RE: remove widgets of a layout - deanhystad - Apr-02-2020

I think messing with layouts to change a view is a bad idea. If I want to change how parts of a window looks based on some selection or mode I would use a QStackedWidget.

I have a question about your code:
def clearlayout(layout):
    for i in reversed(range(layout.count())):
        print(layout.itemAt(i))
        layout.itemAt(i).setParent(None)  <- Why 1
        layout.removeItem(layout.itemAt(i))
        layout.itemAt(i).show()   <- Why 2
Why 1:
Why are you setting the parent to None? A widget with no parent becomes a top level window. When you run this don't you get a bunch of little windows popping up on the desktop?

Why 2: You just removed layoutItem[i]. It is gone.


RE: remove widgets of a layout - catlessness - Apr-02-2020

Sorry that was copied when I was trying another approach to delete them, the function in the file is :
def clearlayout(layout):
    for i in reversed(range(layout.count())):
        print(layout.itemAt(i))
        layout.removeItem(layout.itemAt(i))
I'm new to pyqt, thank you for you suggestion I think I need to learn that now lol