如何解决QCombobox 启用标题选择Qtableview
我正在 Qtableview 中预览文件,并希望用户选择他们想要导入到数据框中的列。此选择是通过在组合框中列出列标题以方便用户选择来完成的。
不知何故我无法填充列表,我的代码是:
def Define_Combo(self):
self.Com_X = QComboBox(self.Combo_X)
self.Com_X.clear()
self.header = self.table.horizontalHeader()
# self.header = [self.table.horizontalHeader(self,QHeaderView)]
self.Com_X.addItems(self.header)
我得到的错误是:
self.Com_X.addItems(self.header)
TypeError: addItems(self,Iterable[str]): argument 1 has unexpected type 'QHeaderView'
解决方法
horizontalHeader()
(和verticalHeader()
一样多)返回一个QHeaderView类,它是一个继承自QAbstractItemView的QWidget,显然不能作为字符串列表使用,也就是addItems()
需要什么。
如果要获取文本标题列表,可以使用表模型的headerData
:
model = self.tableView.model()
for column in range(model.columnCount()):
self.Com_X.addItem(model.headerData(column,QtCore.Qt.Horizontal))
由于标题也可以重新排序,通常最好使用标题视图:
model = self.tableView.model()
header = self.tableView.horizontalHeader()
for column in range(model.columnCount()):
visualIndex = header.visualIndex(column)
self.Com_X.addItem(model.headerData(visualIndex,QtCore.Qt.Horizontal))
大写名称只应用于类和常量,而不是变量和属性,因此您最好将组合命名为 self.com_X
。在官方 Style Guide for Python Code
这可能不是最优雅的解决方案,但我的代码现在如下所示:
def Define_Combo(self):
self.com_x.clear()
self.com_y.clear()
self.com_z.clear()
model = self.table.model()
combo_list = []
for column in range(model.columnCount()):
combo_list.append(model.index(0,column,self.table.rootIndex()).data()) # for row 0
self.com_x.addItems(combo_list)
self.com_y.addItems(combo_list)
self.com_z.addItems(combo_list)
我犯的另一个错误是在定义中定义了我的 QcomboBox
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。