PyQt5:如何重设QtWidgets.QGroupBox的内容

问题描述 投票:0回答:1

我有一个RadioButtonWidget类,该类接收名称列表(button_list)和QtWidgets.QGroupBoxradio_group_box),并为每个名称创建一个单选按钮。我的问题是创建按钮后,无法更改它们。也就是说,如果我使用另一个名称列表再次调用该类,则没有任何变化。我需要在我的课程中创建一个函数来删除所有现有的单选按钮,以便可以在其中添加一个新列表。

我试图在课堂外做radio_group_box.deleteLater(),但这会删除整个盒子。

class RadioButtonWidget(QtWidgets.QWidget):
    def __init__(self, radio_group_box, button_list):
        super().__init__()
        self.radio_group_box = radio_group_box
        self.radio_button_group = QtWidgets.QButtonGroup()

        #create the radio buttons
        self.radio_button_list = []
        for each in button_list:
            self.radio_button_list.append(QtWidgets.QRadioButton(each))

        if button_list != []:
            #set the default checked item
            self.radio_button_list[0].setChecked(True)

        #create layout for radio buttons and add them
        self.radio_button_layout = QtWidgets.QVBoxLayout()

        # add buttons to the layout and button group
        counter = 1
        for each in self.radio_button_list:
            self.radio_button_layout.addWidget(each)
            self.radio_button_group.addButton(each)
            self.radio_button_group.setId(each,counter)
            counter += 1

        # add radio buttons to the group box
        self.radio_group_box.setLayout(self.radio_button_layout)

    def selected_button(self):
        return self.radio_button_group.checkedId()
python pyqt pyqt5
1个回答
0
投票

代替删除单选按钮,您可以创建一个全新的单选按钮布局,并完全按照在构造函数中的设置为组框设置它。这是一个示例,其中函数set_group_box_buttons将从radio_group_box中删除现有布局(通过将其设置为temp小部件来完成),并使用新按钮添加一个新布局。]

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

class RadioButtonWidget(QWidget):

    def __init__(self, radio_group_box, button_list):
        super().__init__()
        self.radio_group_box = radio_group_box
        self.set_group_box_buttons(button_list)

        grid = QGridLayout(self)
        grid.addWidget(self.radio_group_box)

    def selected_button(self):
        return self.radio_button_group.checkedId()

    def set_group_box_buttons(self, button_list):
        self.radio_button_group = QButtonGroup()
        self.radio_button_list = [QRadioButton(x) for x in button_list]
        if button_list:
            self.radio_button_list[0].setChecked(True)

        if self.radio_group_box.layout():
            QWidget().setLayout(self.radio_group_box.layout())

        self.radio_button_layout = QVBoxLayout()
        for i, v in enumerate(self.radio_button_list):
            self.radio_button_layout.addWidget(v)
            self.radio_button_group.addButton(v)
            self.radio_button_group.setId(v, i)
        self.radio_group_box.setLayout(self.radio_button_layout)


class Template(QWidget):

    def __init__(self):
        super().__init__()
        self.rbw = RadioButtonWidget(QGroupBox('Radio Buttons'), ['Radio 1', 'Radio 2', 'Radio 3'])
        self.box = QLineEdit()
        self.box.returnPressed.connect(self.replace_buttons)
        grid = QGridLayout(self)
        grid.addWidget(self.rbw, 0, 0)
        grid.addWidget(self.box, 0, 1)

    def replace_buttons(self):
        self.rbw.set_group_box_buttons(self.box.text().split(', '))


if __name__ == '__main__':
    app = QApplication(sys.argv)
    gui = Template()
    gui.show()
    sys.exit(app.exec_())

为了演示,我添加了QLineEdit,当您按Enter键时,它将更新名称。之前:

enter image description here

之后:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.