我有一个桌面应用程序主窗口有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布局更改为另一个框或类似的东西
答案 0 :(得分:0)
The correct solution is to define a function to clear all elements on the layout :
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)