gpt4 book ai didi

python - 使 PyQt QRadiobutton 跨多个布局独占

转载 作者:太空宇宙 更新时间:2023-11-04 04:35:01 27 4
gpt4 key购买 nike

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

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_()

如果我的单选按钮在我的第一个代码示例中所示的不同布局中,我如何让它们一次独占和激活一个?

最佳答案

您只是在制作一个临时的 ButtonGroup,它会在 __init__ 结束时被销毁。使 ButtonGroup 成为您类(class)的成员以解决此问题。不需要调用 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()

关于python - 使 PyQt QRadiobutton 跨多个布局独占,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51924743/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com