繁体   English   中英

PyQt5如何从QWidget删除图层

[英]PyQt5 How to Remove Layer from QWidget

我有一个桌面应用程序主窗口有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布局更改为另一个框或类似的内容

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

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM