2017-05-23 159 views
0
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() 

我想刪除從家庭模塊中顯示的小工具,當我單擊系列按鈕並從串行模塊中刪除小工具時,我單擊主頁按鈕。 到目前爲止發生的事情是,當我點擊系列按鈕時,他以前的家庭模塊小部件仍然存在。從pyqt中刪除小工具

+0

你能解釋一下自己嗎? – eyllanesc

+0

您只看到按鈕「系列」的原因是您在同一個'QMainWindow'上分配了兩個'QPushButton'小部件而沒有佈局。因此它重疊,只有最後一個出現。這也適用於您的第三個QWidget,無論是複選框還是按鈕。 – Mike

回答

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