Думаю, проблема в том, что ваш принимающий слот не соответствует ни одному из доступных .activated
сигналов.
self.activated.connect(self.setdatastrength)
@QtCore.pyqtSlot()
def setdatastrength(self):
index = self.currentIndex()
it = self.compressive_strength[index]
print(it)
self.concreteproperty.display_condata(it)
Сигнал QComboBox.activated
испускает либо int
индекса, либоstr
выбранного значения. См. Документацию .
Вы прикрепили его к setdatastrength
, который принимает, не принимает никаких параметров (кроме self
, от объекта) - это означает, что это не таксоответствует сигнатуре любого доступного сигнала и не будет вызван.Если вы обновите определение, добавив значение индекса, и примете одно значение int
, оно должно работать.
self.activated.connect(self.setdatastrength)
@QtCore.pyqtSlot(int) # add the target type for this slot.
def setdatastrength(self, index):
it = self.compressive_strength[index]
print(it)
self.concreteproperty.display_condata(it)
После обновления - вышеприведенное выглядит как исправленное, хотя вам не нужнодополнительные index = self.currentIndex()
в setdatastrength
не приносят никакого вреда.
Глядя на ваш код, я думаю, что ярлык обновляется .Проблема на самом деле в том, что вы вообще не видите лейбл.Глядя на инициализацию для ConcreteProperty
class ConcreteProperty(QtWidgets.QWidget):
def __init__(self, parent=None):
super(ConcreteProperty, self).__init__(parent)
self.setFont(QtGui.QFont("Helvetica", 10, QtGui.QFont.Normal, italic=False))
self.concretestrength_lay = QtWidgets.QHBoxLayout()
fctd = "\nfcd\n\nfctd\n\nEc"
con_strength = QtWidgets.QLabel(fctd)
self.con_strength_value = QtWidgets.QLabel(" ")
self.concretestrength_lay.addWidget(con_strength)
self.concretestrength_lay.addWidget(self.con_strength_value, alignment=QtCore.Qt.AlignLeft)
Причина, по которой изменения не появляются, заключается в том, что вы создаете два ConcreteProperty
объектов, один в ConcreteStrengthInfo
и один в ConcreteStrengthComboBox
.Обновления в поле со списком вызывают обновление ConcreteProperty
, прикрепленного к комбинированному списку, а не другого (они являются отдельными объектами).На видимое ConcreteProperty
это не влияет.
Чтобы это работало, вам нужно переместить вложение сигнала + слот из объекта комбинированного окна.Следующее является заменой для двух частей -
class ConcreteStrengthComboBox(QtWidgets.QComboBox):
def __init__(self, parent = None):
super(ConcreteStrengthComboBox, self).__init__(parent)
self.addItems(["C12/15","C16/20","C20/25","C25/30","C30/37","C35/45","C40/50","C45/55",
"C50/60","C55/67","C60/75","C70/85","C80/95","C90/105"])
self.setFont(QtGui.QFont("Helvetica", 10, QtGui.QFont.Normal, italic=False))
self.compressive_strength = ["12","16","20","25","30","35","40","45","50","55",
"60","70","80","90"]
class ConcreteStrengthInFo(QtWidgets.QWidget):
def __init__(self, parent=None):
super(ConcreteStrengthInFo, self).__init__(parent)
hbox = QtWidgets.QHBoxLayout()
concrete_strength = QtWidgets.QLabel("Concrete strength: ")
hbox.addWidget(concrete_strength)
self.concreteproperty = ConcreteProperty()
self.concretestrengthbox = ConcreteStrengthComboBox()
hbox.addWidget(self.concretestrengthbox)
self.concretestrengthbox.activated.connect(self.setdatastrength)
self.vlay = QtWidgets.QVBoxLayout()
self.vlay.addLayout(hbox)
self.vlay.addLayout(self.concreteproperty.concretestrength_lay)
@QtCore.pyqtSlot(int)
def setdatastrength(self, index):
it = self.concretestrengthbox.compressive_strength[index]
print(it)
self.concreteproperty.display_condata(it)
Это работает для меня локально.