<p>我认为问题是你的接收槽与任何可用的<code>.activated</code>信号都不匹配。在</p>
<pre><code>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)
</code></pre>
<p><code>QComboBox.activated</code>信号发出索引的<code>int</code>,或所选值的<code>str</code>。<a href="http://doc.qt.io/qt-5/qcombobox.html#activated" rel="nofollow noreferrer">See documentation</a>。在</p>
<p>您已经将它附加到<code>setdatastrength</code>,它接受不接受任何参数(除了来自对象的<code>self</code>),这意味着它与任何可用信号的签名都不匹配,并且不会被调用。如果您更新定义以添加索引值,并接受单个<code>int</code>它应该可以工作。在</p>
^{pr2}$
<p>在更新之后-上面的问题看起来已经修复了,虽然您不需要在<code>setdatastrength</code>中添加<code>index = self.currentIndex()</code>,但它不会造成任何伤害。在</p>
<p>看看你的代码,我认为标签<em>正在更新。问题是你根本看不到标签。正在查看<code>ConcreteProperty</code>的初始化</p>
<pre><code>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)
</code></pre>
<p>更改没有出现的原因是您创建了两个<em>对象,一个在<code>ConcreteStrengthInfo</code>中,一个在<code>ConcreteStrengthComboBox</code>中。对组合框的更新会触发附加到组合框的<code>ConcreteProperty</code>的更新,而不是另一个(它们是单独的对象)。可见的<code>ConcreteProperty</code>不受影响。在</p>
<p>要实现这一点,您需要将signal attachment+slot移出组合框对象。以下是这两部分的替代品-</p>
<pre><code>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)
</code></pre>
<p>这对我在当地很管用。在</p>