Я создал QWidget
подкласс под названием RadioSpinButton
, в приложении Python с PyQt4, он состоит из QRadioButton
рядом с QSpinBox
. Я использую экземпляр RadioSpinButton
внутри горизонтального макета с двумя экземплярами QRadioButton
. QRadioButton внутри нового класса имеет один и тот же родительский адрес двух других QRadioButtons, но его свойство autoExclusive не работает. Как я могу решить эту проблему? Мне нужно только одна кнопка проверяется, но у меня есть это:PyQt4: QRadioButton внутри подкласса QWidget с autoexclusive собственности
Код
from PyQt4 import QtCore, QtGui
class NewProject(QtGui.QWizard):
def __init__(self, parent=None):
super(NewProject, self).__init__(parent)
# Iniciando páginas
self.init_filepage()
# Tamaño mínimo de la ventana
#self.setMinimumSize(800, 600)
# Título
self.setWindowTitle(self.tr('Nuevo Proyecto'))
def init_filepage(self):
# Página para selección de imágenes
self.addPage(FilesPage(self))
class FilesPage(QtGui.QWizardPage):
def __init__(self, parent=None):
super(FilesPage, self).__init__(parent)
# Título de la página
self.setTitle(self.tr('Imagen'))
self.setSubTitle(self.tr('Seleccione la escena alrededor de la cual se construirá el proyecto.'))
#self.setPixmap(QtGui.QWizard.LogoPixmap, QtGui.QPixmap(":/app-icon.svg").scaledToHeight(48))
# Elementos
# Tipo de imagen según la cantidad de bandas
imgtype = QtGui.QGroupBox(self.tr('Tipo de imagen (cantidad de bandas):'))
imgtypelayout = QtGui.QHBoxLayout()
imgPANtype = QtGui.QRadioButton(self.tr('PAN (1 banda)'), self)
imgtypelayout.addWidget(imgPANtype)
imgMSStype = QtGui.QRadioButton(self.tr('MSS (4 bandas)'), self)
imgtypelayout.addWidget(imgMSStype)
imgVartype = RadioSpinButton(self.tr('Variable'), self)
imgtypelayout.addWidget(imgVartype)
imgtype.setLayout(imgtypelayout)
# Disposición principal
layout = QtGui.QVBoxLayout()
layout.addWidget(imgtype)
self.setLayout(layout)
class RadioSpinButton(QtGui.QWidget):
def __init__(self, text, parent=None):
super(RadioSpinButton, self).__init__(parent)
# Radiobutton
self.button = QtGui.QRadioButton(text, parent)
self.button.toggled.connect(self.change_spinbox)
# Spinbox
self.spinbox = QtGui.QSpinBox()
self.spinbox.setEnabled(False)
# Disposición
layout = QtGui.QHBoxLayout()
layout.addWidget(self.button)
layout.addWidget(self.spinbox)
self.setLayout(layout)
@QtCore.pyqtSlot()
def change_spinbox(self):
self.spinbox.setEnabled(not self.spinbox.isEnabled())
Является ли это правильный способ проектировать RadioSpinButton
подкласс?
Я проверил, что у них один и тот же родительский виджет. :( – osjerick
Ну, они явно не так? QRadioButton с spinner является дочерью RadioSpinButton. Я понимаю, что QRadioButtons должен иметь * точный * тот же самый родитель, чтобы исключительность работала правильно. В противном случае используйте QButtonGroup. - Я вижу, что вы устанавливаете родительский элемент QRadioButton в своем конструкторе. Проверяете ли вы, что это все еще так, после того, как вы добавили их в макет и задали макет? Независимо от того, QButtonGroup должен его исправить. –
Хорошо, спасибо! Но почему это происходит ?: Если я пишу 'print imgMSStype.parent()' и 'print imgMSStype.parent()' - это правильные места, результатом обоих является ' и' 'соответственно. Фактически, если сначала проверяется RadioSpinButton, а затем вы проверяете один из другого, он будет переключаться всего один раз (первый раз). –
osjerick