gpt4 book ai didi

python - PyQt5 QTablewidget 项目对齐

转载 作者:行者123 更新时间:2023-12-03 08:47:09 25 4
gpt4 key购买 nike

我想要的是对齐 Qtablewidget 中的复选框。这是我的脚本

mylist = [some list I made..]
for i in range(len(mylist)) :
row_count = self.tableWidget.rowCount()
nowset = row_count+1
self.tableWidget.setRowCount(nowset)
self.tableWidget.setItem( row_count, 0, QTableWidgetItem(mylist[i]))
chkBoxItem = QTableWidgetItem()
chkBoxItem.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)
chkBoxItem.setCheckState(QtCore.Qt.Unchecked)
self.tableWidget.setItem( i, 1, chkBoxItem)

self.tableWidget.setFocusPolicy(False)
self.tableWidget.setColumnWidth(1, 150)
self.tableWidget.horizontalHeader().setSectionResizeMode(0, QHeaderView.Stretch)

这是问题1。如何将我的QtableWidget项目(chekbox)对齐到中心。

通过一些谷歌搜索,我发现 cellwidget 确实有效。所以我尝试将代码更改为 cellWidget 而不是 Item。就像

self.checkBoxList= []
for i in range(len(mylist)):
ckbox = QCheckBox()
self.checkBoxList.append(ckbox)

for i in range(len(mylist)):
cellWidget = QWidget()
layoutCB = QHBoxLayout(cellWidget)
layoutCB.addWidget(self.checkBoxList[i])
layoutCB.setAlignment(QtCore.Qt.AlignCenter)
layoutCB.setContentsMargins(0,0,0,0)
cellWidget.setLayout(layoutCB)
self.tableWidget.setCellWidget(i,1,cellWidget)

这是我需要的对齐复选框。但让其他事情成为问题。

问题2.使用cellwidget,如何将所有chekbox cellwidget设置为选中状态。

问题3.使用cellwidget,如何知道哪一行被选中。

问题4.使用cellwidget,如何更改单元格颜色。

看来 itemcellwidget 的工作方式不同。

因为我有按钮可以将所有复选框更改为选中状态

另一个按钮,用于获取第 0 列的文本,并选中同一行的复选框。

我也尝试过这样的委托(delegate)。

class AlignDelegate(QtWidgets.QStyledItemDelegate):
def initStyleOption(self, option, index):
super(AlignDelegate, self).initStyleOption(option, index)
option.displayAlignment = QtCore.Qt.AlignCenter

并将以下代码放在上面self.tableWidget.setFocusPolicy(False)

delegate = AlignDelegate(self.tableWidget)
self.tableWidget.setItemDelegateForColumn(1, delegate)

不知道为什么。但不起作用。问题 5. 为什么不起作用?

这是我的程序的屏幕截图。

enter image description here

如果你能解决问题1,对我来说就足够了。

因为其他答案会让我更改以下所有代码。

其他问题只是告诉我尝试过,但它们会带来更多问题。

最佳答案

如果您想让复选框居中,则必须使用 QProxyStyle:

from PyQt5 import QtCore, QtGui, QtWidgets


class CheckBoxStyle(QtWidgets.QProxyStyle):
def subElementRect(self, element, option, widget=None):
r = super().subElementRect(element, option, widget)
if element == QtWidgets.QStyle.SE_ItemViewItemCheckIndicator:
r.moveCenter(option.rect.center())
return r


class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)

data = ["1", "2", "3", "4", "5", "6"]

self.tableWidget = QtWidgets.QTableWidget(0, 2)
self.setCentralWidget(self.tableWidget)

for text in data:
row = self.tableWidget.rowCount()
self.tableWidget.insertRow(row)

text_item = QtWidgets.QTableWidgetItem(text)

checkbox_item = QtWidgets.QTableWidgetItem()
checkbox_item.setFlags(
QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled
)
checkbox_item.setCheckState(QtCore.Qt.Unchecked)

self.tableWidget.setItem(row, 0, text_item)
self.tableWidget.setItem(row, 1, checkbox_item)


if __name__ == "__main__":
import sys

app = QtWidgets.QApplication(sys.argv)

checkbox_style = CheckBoxStyle(app.style())
app.setStyle(checkbox_style)

w = MainWindow()
w.show()

sys.exit(app.exec_())

enter image description here

关于python - PyQt5 QTablewidget 项目对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60947269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com