2017-05-23 19 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上に2つの '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() 
関連する問題