2017-05-23 3 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' 위젯을 할당하고 있기 때문입니다. 따라서 오버레이되고 마지막 것만 나타납니다. 3 번째 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()