从pyqt中删除小部件

问题描述 投票:0回答:2
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()

我想在单击系列按钮时从主页模块中删除显示的小部件,而在单击主页按钮时从系列模块中删除小部件。到目前为止,发生的事情是当我单击系列按钮时,他以前来自home模块的小部件仍然存在。

python pyqt pyqt4
2个回答
1
投票
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()

0
投票

我的版本是

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

我通过在cogmapui的print("Deleted")函数中放置__del__进行了检查,是的,它被调用了。

© www.soinside.com 2019 - 2024. All rights reserved.