grouping radio buttons in PyQt
Solution 1
A QMainWindow
provides a layout already, you can't simply replace that with your own. Either inherit from a plain QWidget
, or create a new widget and add the layout and buttons to that.
Your naming is confusing too, QButtonGroup
isn't a layout. It doesn't actually provide any visible UI. If you need a UI element that groups buttons, you should look at QGroupBox
instead.
Here's a simple variation on what you have above:
def func(self):
layout=QtGui.QHBoxLayout() # layout for the central widget
widget=QtGui.QWidget(self) # central widget
widget.setLayout(layout)
number_group=QtGui.QButtonGroup(widget) # Number group
r0=QtGui.QRadioButton("0")
number_group.addButton(r0)
r1=QtGui.QRadioButton("1")
number_group.addButton(r1)
layout.addWidget(r0)
layout.addWidget(r1)
letter_group=QtGui.QButtonGroup(widget) # Letter group
ra=QtGui.QRadioButton("a")
letter_group.addButton(ra)
rb=QtGui.QRadioButton("b")
letter_group.addButton(rb)
layout.addWidget(ra)
layout.addWidget(rb)
# assign the widget to the main window
self.setCentralWidget(widget)
self.show()
Solution 2
Grouping of radio buttons can be done by all containers. You don't necessarily need QGroupBox, you can use QFrame instead or a QTabWidget. Your choice. Here's a sample code.
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.layoutWidget1 = QtWidgets.QWidget(self.centralwidget)
self.frame_1 = QtWidgets.QFrame(self.layoutWidget1)
self.radio_btn_a = QtWidgets.QRadioButton(self.frame_1)
self.radio_btn_a.setGeometry(QtCore.QRect(160, 80, 40, 17))
self.radio_btn_a.setObjectName("radio_btn_a")
MainWindow.setCentralWidget(self.centralwidget)
Comments
-
sudeepdino008 almost 2 years
import sys from PyQt4 import QtCore, QtGui class Class1(QtGui.QMainWindow): def __init__(self): super(Class1, self).__init__() self.func() def func(self): r0=QtGui.QRadioButton("0",self) r1=QtGui.QRadioButton("1",self) ra=QtGui.QRadioButton("a",self) rb=QtGui.QRadioButton("b",self) r0.move(100,100) r1.move(400,100) ra.move(100,400) rb.move(400,400) number_layout=QtGui.QButtonGroup() letter_layout=QtGui.QButtonGroup() number_layout.addButton(r0) number_layout.addButton(r1) letter_layout.addButton(ra) letter_layout.addButton(rb) layout=QtGui.QHBoxLayout(self) self.show() def main(): app = QtGui.QApplication(sys.argv) mw = Class1() mw.show() sys.exit(app.exec_()) if __name__=='__main__': main()
I am trying to group r0,r1 and ra,rb i.e. when r0 is checked, r1 should be unchecked with no effect on states of ra or rb. How can I achieve this? The code indicates what I have tried so far.
-
Karel Bílek almost 11 yearsHello. Sorry for resurrectind 3 years old answer, but can you please add example how to use QGroupBox too? I cannot find any example with QGroupBox and the documentation is hard to understand
-
chwi over 8 years@KarelBílek yeh, me too.