选择单选按钮之一时动态添加和删除布局

时间:2018-06-23 10:59:27

标签: python pyqt pyqt5 qlayout

我可以在pyqt中将布局动态添加到QHBoxLayout中,但是一旦添加,便无法删除它们。

主要目的是根据所选的单选按钮动态添加和删除布局。

def SearchTab(self):

  self.layout = QVBoxLayout()

  button_layout = QHBoxLayout()
  radio_button_1 = QRadioButton("Search")
  radio_button_2 = QRadioButton("Update")
  button_layout.addWidget(radio_button_1)
  button_layout.addWidget(radio_button_2)
  self.layout.addItem(button_layout)

  radio_button_1.toggled.connect(lambda :self.SelectButtonCheck(radio_button_1))
  radio_button_1.toggled.connect(lambda :self.UpdateButtonCheck(radio_button_2))

  self.setTabText(0,"Search")

  self.tab1.setLayout(self.layout)


def SelectButtonCheck(self,b):
    if b.text() == "Search":
        if b.isChecked():
            print(b.text()+ "is selected")
            self.pg_details = pgd.PGDetails()
            layout = self.pg_details.returnLayout()
            self.layout.addLayout(layout)


def UpdateButtonCheck(self,b):

    if b.text() == "Update":
        if b.isChecked():
            print(b.text()+ " is selected")
            for i in  range(self.layout.count()):
                print(self.layout.itemAt(i))
                temp_layout = self.layout.itemAt(i)
                widget = temp_layout.widget()
                temp_layout.removeItem(temp_layout)

                if widget is not None:
                    widget.deleteLater()

初始屏幕-

当前,当选择“搜索”单选按钮时,我可以添加布局-

Contains QFromLayout

但是当我选择“更新”单选按钮时什么也没发生

Nothing Happens here and the application crashed

还可以找到已添加的布局-

for i in  range(self.layout.count()):
print(self.layout.itemAt(i))
<PyQt5.QtWidgets.QHBoxLayout object at 0x1180ec438>
<PyQt5.QtWidgets.QFormLayout object at 0x1180ff828>

正在添加布局但未将其删除。

在我想念的任何地方

1 个答案:

答案 0 :(得分:1)

我能够解决这个问题。花了我一段时间,但了解了布局中小部件的排列方式。

我认为删除布局会层叠删除小部件本身。

我使用以下功能删除了布局及其对应的小部件。

?

removeFormLayout函数会选择我使用“搜索”单选按钮添加的版式,removeLayout也会删除其下的所有小部件。

enter image description here

我们对所用方法提出了建议和改进,我尝试了一些除FormLayout之外的布局移除方法。目前运行正常。

也有人知道如何在顶部对齐HBoxLayout,单选按钮又从中间对齐,我想在屏幕顶部对齐它们