rajesh kootrapali
rajesh kootrapali

Reputation: 39

Deleting widgets from pyqt

class Window(QtGui.QMainWindow):
  def __init__(self):
    super(Window, self).__init__()
    self.tabs()

  def home(self):
    df = QtGui.QPushButton('hello', self)
    df.show()

  def series(self):
    df = QtGui.QCheckBox('hello', self)
    df.show()   

  def tabs(self):
    btn_home = QtGui.QPushButton(QtGui.QIcon('home.png'), 'Home', self)
    btn_home.clicked.connect(self.home)

    btn_series = QtGui.QPushButton(QtGui.QIcon('series.png'),'Series', self)
    btn_series.clicked.connect(self.series)

    self.show()

def run():
    app = QtGui.QApplication(sys.argv)
    GUI = Window()
    sys.exit(app.exec_())

if __name__ == '__main__': run()

I wanted to delete the widgets shown from home module when i click series button and delete widgets from series module when i click home button. So far whats happening is when i click series button he previous widgets from home module are still there.

Upvotes: 0

Views: 6592

Answers (2)

Richard Keene
Richard Keene

Reputation: 401

My version is

self.main_canvas.children().remove(cogmapui)
cogmapui.deleteLater()

I checked it by putting a print("Deleted") in the cogmapui's __del__ function and, yes, it gets called.

Upvotes: 0

Mike
Mike

Reputation: 131

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *

import sys

class Window(QMainWindow):
  def __init__(self):
    super(Window, self).__init__()
    self.widget =QWidget()
    self.layout = QHBoxLayout()
    self.widget.setLayout(self.layout)
    self.setCentralWidget(self.widget)
    self.tabs()

  def home(self):
    self.clear()
    self.df1 = QPushButton('hello')
    self.layout.addWidget(self.df1)

  def series(self):
    self.clear()
    self.df2 = QCheckBox('hello')
    self.layout.addWidget(self.df2)

  def tabs(self):
    self.btn_home = QPushButton(QIcon('home.png'), 'Home')
    self.btn_home.clicked.connect(self.home)
    self.layout.addWidget(self.btn_home)
    self.btn_series = QPushButton(QIcon('series.png'),'Series')
    self.btn_series.clicked.connect(self.series)
    self.layout.addWidget(self.btn_series)
    self.show()

  def clear(self):
      item = self.layout.itemAt(2)
      if item != None :
          widget = item.widget()
          if widget != None:
              self.layout.removeWidget(widget)
              widget.deleteLater()    

def run():
    app = QApplication(sys.argv)
    GUI = Window()
    sys.exit(app.exec_())

if __name__ == '__main__': run()

Upvotes: 2

Related Questions