Как мне связать радио имеющие разных родителей?
Мой код:
import sys
import os
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class Window(QWidget):
def __init__(self):
super().__init__()
self.resize(800, 800)
self.setStyleSheet('background:red;')
wid = QWidget(self)
wid.setStyleSheet('background:brown;')
lay = QVBoxLayout(wid)
self.rad = QRadioButton(wid)
self.rad.setStyleSheet('background:blue;')
lay.addWidget(self.rad)
self.rad2 = QRadioButton(wid)
self.rad2.setStyleSheet('background:blue;')
lay.addWidget(self.rad2)
wid2 = QWidget(self)
wid2.setStyleSheet('background:green;')
lay.addWidget(wid2)
lay2 = QVBoxLayout(wid2)
self.rad3 = QRadioButton(wid)
self.rad3.setStyleSheet('background:green;')
lay2.addWidget(self.rad3)
self.rad4 = QRadioButton(wid)
self.rad4.setStyleSheet('background:green;')
lay2.addWidget(self.rad4)
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Window()
w.show()
sys.exit(app.exec_())
Я хочу связать между собой синие и зеленые радио. Так как если бы они находились в одном виджете. Как я могу это сделать?
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Если вы хотите использовать такие кнопки, как QCheckBox, QRadioButton, QPushButton и QToolButton, которые должны быть эксклюзивными, то вы должны использовать QButtonGroup:
import sys
#import os
from PyQt5.Qt import *
class Window(QWidget):
def __init__(self):
super().__init__()
self.resize(200, 200)
self.setStyleSheet('background:red;')
wid = QWidget(self)
wid.setStyleSheet('background:brown;')
lay = QVBoxLayout(wid)
self.rad = QRadioButton(wid)
self.rad.setStyleSheet('background:blue;')
lay.addWidget(self.rad)
self.rad2 = QRadioButton(wid)
self.rad2.setStyleSheet('background:blue;')
lay.addWidget(self.rad2)
wid2 = QWidget(self)
wid2.setStyleSheet('background:green;')
lay.addWidget(wid2)
lay2 = QVBoxLayout(wid2)
self.rad3 = QRadioButton(wid)
self.rad3.setStyleSheet('background:green;')
lay2.addWidget(self.rad3)
self.rad4 = QRadioButton(wid)
self.rad4.setStyleSheet('background:green;')
lay2.addWidget(self.rad4)
# ++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
buttonGroup = QButtonGroup(self, exclusive=True)
buttonGroup.buttonClicked[int].connect(self.onButtonClicked) #(int id)
buttonGroup.addButton(self.rad, 1)
buttonGroup.addButton(self.rad2, 2)
buttonGroup.addButton(self.rad3, 3)
buttonGroup.addButton(self.rad4, 4)
def onButtonClicked(self, id):
print(id)
# ++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Window()
w.show()
sys.exit(app.exec_())
