2

我正在尝试创建在任何时候只有一个处于活动状态的单选按钮。我尝试使用 QButtonGroup 并将其设置为 Exclusive。但是,它似乎不起作用。我的代码如下:

from PyQt4 import QtGui, QtCore
import sys
class Window(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        button_group = QtGui.QButtonGroup()
        data_list = ['apple', 'orange', 'banana', 'mango']
        main_widget = QtGui.QWidget()
        main_widget_layout = QtGui.QVBoxLayout()
        main_widget.setLayout(main_widget_layout)
        for item in data_list:
            radio_button = QtGui.QRadioButton()
            button_group.addButton(radio_button)
            item_label = QtGui.QLabel(item)
            mini_widget = QtGui.QWidget()
            mini_widget_layout = QtGui.QHBoxLayout()
            mini_widget_layout.addWidget(radio_button)
            mini_widget_layout.addWidget(item_label)
            mini_widget_layout.addStretch(True)
            mini_widget.setLayout(mini_widget_layout)
            main_widget_layout.addWidget(mini_widget)
        button_group.setExclusive(True)
        self.setCentralWidget(main_widget)
        self.show()
if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    main_window = Window()
    main_window.show()
    app.exec_()

但是,当我尝试在下面的单个布局上添加相同的单选按钮时,单选按钮是独占的,一次只能激活一个。

from PyQt4 import QtGui, QtCore
import sys

class Window(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        data_list = ['apple', 'orange', 'banana', 'mango']
        main_widget = QtGui.QWidget()
        main_widget_layout = QtGui.QFormLayout()
        for item in data_list:
            radio_button = QtGui.QRadioButton()
            main_widget_layout.addRow(radio_button,QtGui.QLabel(item))

        main_widget.setLayout(main_widget_layout)
        self.setCentralWidget(main_widget)
        self.show()


if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    main_window = Window()
    main_window.show()
    app.exec_()

如果我的单选按钮位于不同的布局中,如我的第一个代码示例所示,如何使我的单选按钮一次独占并处于活动状态?

4

1 回答 1

1

你只是在做一个临时ButtonGroup的,在__init__. 让ButtonGroup你的班级成员来解决这个问题。button_group.setExclusive(True)不需要调用,因为这已经是ButtonGroup. 我还明确检查了第一个按钮,否则ButtonGroup它处于未知状态。

固定代码:

class Window(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.button_group = QtGui.QButtonGroup()
        data_list = ['apple', 'orange', 'banana', 'mango']
        main_widget = QtGui.QWidget()
        main_widget_layout = QtGui.QVBoxLayout()
        main_widget.setLayout(main_widget_layout)
        first = True
        for item in data_list:
            radio_button = QtGui.QRadioButton()
            if first:
                radio_button.setChecked(True)
                first = False
            self.button_group.addButton(radio_button)
            item_label = QtGui.QLabel(item)
            mini_widget = QtGui.QWidget()
            mini_widget_layout = QtGui.QHBoxLayout()
            mini_widget_layout.addWidget(radio_button)
            mini_widget_layout.addWidget(item_label)
            mini_widget_layout.addStretch(True)
            mini_widget.setLayout(mini_widget_layout)
            main_widget_layout.addWidget(mini_widget)
        self.setCentralWidget(main_widget)
        self.show()
于 2018-08-20T07:38:54.090 回答