微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

QCombobox 启用标题选择Qtableview

如何解决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 举报,一经查实,本站将立刻删除。