【问题标题】:PyQt5 How to Remove Layer from QWidgetPyQt5 如何从 QWidget 中删除图层
【发布时间】:2017-12-16 09:38:43
【问题描述】:

我有一个桌面应用程序主窗口有 3 个选项卡,在其中一个选项卡中我显示一些按钮(在 for 循环中生成),然后当用户单击按钮时,选项卡窗口显示另一个小部件,例如在布局中的小部件。

class Tabs(QtWidgets.QTabWidget):
def __init__(self):
    super().__init__()
    self.init_ui()

def init_ui(self):
    self.tab1 = QtWidgets.QWidget()
    self.tab2 = QtWidgets.QWidget()
    self.tab3 = QtWidgets.QWidget()

    self.addTab(self.tab1 , 'TAB1 TITLE')
    self.addTab(self.tab2 , 'TAB2 TITLE')
    self.addTab(self.tab3 , 'TAB3 TITLE')

    self.TAB1Go()
    self.TAB2Go()

    self.show()

def TAB1Go(self):
    # Rest of codes

def TAB2Go(self):

    h_box = QtWidgets.QHBoxLayout()
    v_box = QtWidgets.QVBoxLayout()

    self.WelcomeLabel = QtWidgets.QLabel('Welcome to tab2')
    v_box.addWidget(self.WelcomeLabel)
    self.btn = QtWidgets.QPushButton('push me')
    v_box.addWidget(self.btn)
    self.btn.clicked.connect(self.ShowAnotherWidget)                
    v_box.addStretch()
    v_box.addLayout(h_box)
    self.tab2.setLayout(v_box)


def ShowAnotherWidget(self):
    this_button = self.sender()
    print (this_button.text())
    self.tab2.deleteLayer() #some thing like this
    # self.tab2.setParent(self) < this one delete whole tab2 >




class Window(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.init_ui()

    def init_ui(self):
        self.tabs = Tabs()
        self.tabs.doReadCats()
        self.setCentralWidget(self.tabs)
        self.setWindowTitle('ToDo List')
        self.resize(330,500)
        self.show()

app = QtWidgets.QApplication(sys.argv)
w = Window()
sys.exit(app.exec_())

当客户单击按钮时,我想将 tab2 布局更改为另一个框或类似的东西

【问题讨论】:

    标签: python user-interface layout pyqt


    【解决方案1】:

    正确的解决方案是定义一个函数来清除布局上的所有元素:

    def clearLayout(self, layout):
        for i in reversed(range(layout.count())):
            item = layout.itemAt(i)
    
            if isinstance(item, QtWidgets.QWidgetItem):
                print ("widget" + str(item))
                item.widget().close()
                # or
                # item.widget().setParent(None)
            elif isinstance(item, QtWidgets.QSpacerItem):
                print ("spacer " + str(item))
                # no need to do extra stuff
            else:
                print ("layout " + str(item))
                self.clearLayout(item.layout())
    
            # remove the item from layout
            print ('item' + str(item))
            layout.removeItem(item)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多