在 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的主要内容,如果未能解决你的问题,请参考以下文章