在 QTableView Row 上垂直居中对齐 QProgressBar

Posted

技术标签:

【中文标题】在 QTableView Row 上垂直居中对齐 QProgressBar【英文标题】:Align vertically center QProgressBar on QTableView Row 【发布时间】:2020-11-10 20:40:13 【问题描述】:

我正在使用 Pyside2 构建一个应用程序,我用 ProgressBar 填充 TableView。我可以将 Progress 放在每一行上,因此,我无法将 ProgressBar 垂直居中,就像我在第 1 列上居中文本一样。

我在 ProgressBar 属性中尝试了以下操作:

progressList[i].setAlignment(Qt.AlignVCenter)
progressList[i].setAlignment(Qt.AlignCenter)

但是没有效果。

图像显示外观,ProgressBar 保持在最上面一行

以下是我用来填充 tableview 行的代码

QMainWindow.__init__(self, parent)

        self.setupUi(self)
        self.setIcon()
        self.showMaximized()

        self.modelo = CustomTableModel(data)

        self.tableView.setModel(self.modelo)

        self.titulos = self.tableView.horizontalHeader()

        self.titulos.setSectionResizeMode(QHeaderView.Interactive)
        self.titulos.setStretchLastSection(True)


        self.tableView.verticalHeader().setVisible(False)

        self.tableView.selectionModel().selectionChanged.connect(self.selectedItem)
        self.tableView.setSelectionBehavior(QTableView.SelectRows)
        self.tableView.setSelectionMode(QTableView.SingleSelection)

        verticalHeader = self.tableView.verticalHeader()
        verticalHeader.setSectionResizeMode(QHeaderView.Fixed);
        verticalHeader.setDefaultSectionSize(60);


        
        progressList = []
        vlayoutList = []
        for i in range(0,len(data)):
            print(data[i][1])
            vlayoutList.append(QVBoxLayout())
            progressList.append(QProgressBar())
            progressList[i].setMinimum(0)
            progressList[i].setMaximum(10)
            if data[i][1] > 7:
                progressList[i].setStyleSheet(" QProgressBar  border: 2px solid gray; border-radius: 0px; text-align: center;  QProgressBar::chunk background-color: #3add36; width: 1px;")
            elif data[i][1] > 4 and data[i][1] < 8: 
                progressList[i].setStyleSheet(" QProgressBar  border: 2px solid gray; border-radius: 0px; text-align: center;  QProgressBar::chunk background-color: #ff9000; width: 1px;")
            elif data[i][1] < 5:
                progressList[i].setStyleSheet(" QProgressBar  border: 2px solid gray; border-radius: 0px; text-align: center;  QProgressBar::chunk background-color: #ff0000; width: 1px;")
            progressList[i].setTextVisible(False)
            progressList[i].setValue(data[i][1])

            progressList[i].setMaximumHeight(30)
            progressList[i].setAlignment(Qt.AlignVCenter)

            self.tableView.setIndexWidget(self.tableView.model().index(i,1), progressList[i])
        

【问题讨论】:

请提供minimal reproducible example 谢谢,我已经添加了我正在使用的代码。 这不是 MRE 【参考方案1】:

我已经通过使用垂直布局作为进度条父级并从中创建一个小部件来解决问题,解决的代码如下所示

progressList[i].setMaximumHeight(30)
progressList[i].setAlignment(Qt.AlignVCenter)
vlayoutList[i].addWidget(progressList[i])
wdgetList[i].setLayout(vlayoutList[i])
self.tableView.setIndexWidget(self.tableView.model().index(i,1), wdgetList[i])

最好的问候

古斯塔沃

【讨论】:

以上是关于在 QTableView Row 上垂直居中对齐 QProgressBar的主要内容,如果未能解决你的问题,请参考以下文章

word文档里面的文字垂直方向上如何居中?

水平和垂直居中引导连续行中的 4 列

css如何使div里面的文字垂直对齐

如何在 Bootstrap 列中垂直居中 div? [复制]

flex布局

如何用word使图片上下居中