用列表填充QComboBox

5
我正在使用PyQT4开发一个GUI对话框,其中导入一些数据到Pandas DataFrame并将数据绘制到嵌入的Matplotlib画布上。
我想将DataFrame中的变量列表传递给组合框。我的第一次尝试是:
list = list(df.parameter,unique())
self.FirstComboBox = QtGui.QComboBox()
self.FirstComboBox.addItems(list)

但是运行这个程序后,我得到了:
TypeError: QComboBox.addItems(QStringList): argument 1 has unexpected type 'list'

我曾经看到过一些例子,其中将字典键的排序列表传递给组合框,因此我很困惑为什么不能传递列表。

本。
3个回答

3
最终我成功地解决了这个问题。但是我对它不太满意。
        for i in range(len(channels)):
            self.MyComboBox.addItem(channels[i])

在Python中,这种显式迭代的方式可以轻松地简化为:for channel in channels: self.MyComboBox.addItem(channel)。不幸的是,PySide2似乎需要类似的绕过方式。特别是,在尝试将纯Python字符串序列传递给任何addItems()方法时,都会引发“TypeError: 'PySide2.QtWidgets.QComboBox.addItems' called with wrong argument types”异常 - 这是底层绑定生成器(例如SIP、Shiboken2)的明显失败。</ugh> - Cecil Curry
1
哦,我明白了。在我的情况下,我试图将OrderedDict值的视图(即由OrderedDict.values()方法返回的序列)传递给QComboBox.addItems()方法。由于这个视图一个有效的序列,这理论上应该可以工作。但它不行,因为绑定生成器似乎只支持tuplelist序列。在我的情况下,解决方案是将所需序列首先强制转换为tuple:例如,self.MyComboBox.addItems(tuple(channels)) - Cecil Curry

2

看起来你正在使用旧的V1 API。你可以使用更新的API,这样就不需要将字符串转换为QStrings(或在这种情况下是QStringLists)。

import sip
# Do this before you import PyQt
sip.setapi('QString', 2)

from PyQt4 import QtCore

0

addItems 对此起作用

months = ['Jan', 'Feb', 'Mar']
cbo = QComboBox()
cbo.addItems(months)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接