羽中飞人 2021-08-04 23:10 采纳率: 48.1%
浏览 712
已结题

pyqt5的tablewidget如何能按数字排序

Qtablewidget,可以设置,点击表头排序,但默认的是按字符串排序,如果遇到列内容是数字,就不能满足我们的需求
于是网上找了一下,方法是这样的

 for i in range(rows):
            values = df.iloc[i].values
            for j in range(columns):
                item = QTableWidgetItem()
                if isinstance(values[j], str):
                    value = str(values[j]) if values[j] else ''
                    item.setText(value)
                else:
                    value = values[j]
                    item.setData(QtCore.Qt.DisplayRole, str(value))

首先判断是字符窜,还是数字,如果是数字类型,就设置 item.setData(QtCore.Qt.DisplayRole, str(value)),但我发现这样没用
有遇到类似的问题吗

  • 写回答

1条回答 默认 最新

  • 樱花の雨 2021-08-05 08:59
    关注

    #include "mainwindow.h"
    #include "ui_mainwindow.h"

    MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
    {
    ui->setupUi(this);
    ui->tableWidget->horizontalHeader()->setSortIndicatorShown(true); //显示排序图标(默认为上下箭头)
    ui->tableWidget->horizontalHeader()->setSortIndicator(0,Qt::SortOrder::AscendingOrder); //设置第0列 升序排序
    ui->tableWidget->horizontalHeader()->setSortIndicator(1,Qt::SortOrder::AscendingOrder); //设置第1列 升序排序
    ui->tableWidget->horizontalHeader()->setSortIndicator(2,Qt::SortOrder::AscendingOrder); //设置第2列 升序排序
    connect(ui->tableWidget->horizontalHeader(),SIGNAL(sectionClicked(int )),this, SLOT(sortTableByCol(int)));
    }

    MainWindow::~MainWindow()
    {

    }

    void MainWindow::sortTableByCol(int col)
    {
    if(sortUpDown) //sortUpDown为自定义的一个bool变量,表示升序还是降序
    {
    ui->tableWidget->sortItems(col, Qt::AscendingOrder);
    sortUpDown=false;
    }
    else
    {
    ui->tableWidget->sortItems(col, Qt::DescendingOrder);
    sortUpDown=true;
    }
    }

    评论

报告相同问题?

问题事件

  • 系统已结题 8月12日
  • 创建了问题 8月4日