擅长:python、mysql、java
<p>以您在面值上发布的示例代码为例,我可以看到几个问题。在</p>
<p>首先,根据<code>initGui</code>和{<cd2>}方法的不同,可能有两组组合框在使用。这些信号连接到<code>self.dlg.ui.*Combo</code>,而项目被添加到<code>self.dlg.*Combo</code>。在</p>
<p>第二,你似乎是一次又一次地填充组合框,而没有事先清除它们。在</p>
<p>第三,您似乎没有保留组合框索引和列表之间的一对一关系,因为您是根据类型过滤层。在</p>
<p>最后,层的列表来自于a<em>map</em>的值,所以肯定不能保证它们会以相同的顺序出现。在</p>
<p>我建议您将<a href="http://qgis.org/api/classQgsMapLayer.html#a710f27dec806d3bcd5ae14701c2e6fd7" rel="nofollow">layer id</a>与每个组合项相关联,然后通过<a href="http://qgis.org/api/classQgsMapLayerRegistry.html#aae705be985d85b4122bf7d9ff9cc9b05" rel="nofollow">mapLayer</a>方法检索层。也就是说,添加如下组合项:</p>
<pre><code> self.dlg.indivCombo.addItem(layer.name(), layer.id())
</code></pre>
<p>然后像这样检索图层:</p>
^{pr2}$
<p>注意:如果您使用Python2,组合数据将存储为<code>QVariant</code>,因此您需要像这样提取标识符:</p>
<pre><code> identifier = self.dlg.ui.indivCombo.itemData(index).toString()
</code></pre>
<p>或者这个:</p>
<pre><code> identifier = self.dlg.ui.indivCombo.itemData(index).toPyObject()
</code></pre>