Python PyQt5 QTablewidget项目对齐
我想要的是对齐Qtablewidget中的复选框。 下面是我的脚本Python PyQt5 QTablewidget项目对齐,python,pyqt,Python,Pyqt,我想要的是对齐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, QT
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,如何更改单元格颜色
似乎item和cellwidget的工作方式不同
因为我有一个按钮,可以将所有复选框更改为选中和
另一个按钮,用于获取选中同一行复选框的第0列文本
我也试过这样做
class AlignDelegate(QtWidgets.QStyledItemDelegate):
def initStyleOption(self, option, index):
super(AlignDelegate, self).initStyleOption(option, index)
option.displayAlignment = QtCore.Qt.AlignCenter
并将下面的代码置于self.tableWidget.setFocusPolicyFalse上方
不知道为什么。但是不起作用。
问题5。为什么不起作用
这是我的程序截图
如果你能解决问题1。那对我来说就足够了
因为其他的答案会让我改变下面所有的代码
其他的问题只是告诉我我试过了,他们制造了更多的问题 如果要将复选框居中,则必须使用QProxyStyle: 从PyQt5导入QtCore、QtGui、QtWidgets 类CheckBoxStyleQtWidgets.QProxyStyle: def subElementRectself、元素、选项、小部件=无: r=super.subelement矩形元素、选项、小部件 如果元素==QtWidgets.QStyle.SE_ItemViewItemCheckIndicator: r、 moveCenteroption.rect.center 返回r 类MainWindowQtWidgets.QMainWindow: def u_init__self,父项=无: 超级。初始父级 数据=[1,2,3,4,5,6] self.tableWidget=QtWidgets.QTableWidget0,2 self.setCentralWidgetself.tableWidget 对于数据中的文本: 行=self.tableWidget.rowCount self.tableWidget.insertRowrow text\u item=QtWidgets.QTableWidgetItemtext 复选框_item=QtWidgets.QTableWidgetItem 复选框\u item.setFlags QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled 复选框\u item.setCheckStateQtCore.Qt.Unchecked self.tableWidget.setItemrow,0,文本项 self.tableWidget.setItemrow,1,复选框\u项 如果uuuu name uuuuu==\uuuuuuuu main\uuuuuuuu: 导入系统 app=qtwidts.QApplicationsys.argv checkbox\u style=CheckBoxStyleapp.style app.setStylecheckbox\u样式 w=主窗口 w、 展示 sys.exitapp.exec_
如果要将复选框居中,则必须使用QProxyStyle: 从PyQt5导入QtCore、QtGui、QtWidgets 类CheckBoxStyleQtWidgets.QProxyStyle: def subElementRectself、元素、选项、小部件=无: r=super.subelement矩形元素、选项、小部件 如果元素==QtWidgets.QStyle.SE_ItemViewItemCheckIndicator: r、 moveCenteroption.rect.center 返回r 类MainWindowQtWidgets.QMainWindow: def u_init__self,父项=无: 超级。初始父级 数据=[1,2,3,4,5,6] self.tableWidget=QtWidgets.QTableWidget0,2 self.setCentralWidgetself.tableWidget 对于数据中的文本: 行=self.tableWidget.rowCount self.tableWidget.insertRowrow text\u item=QtWidgets.QTableWidgetItemtext 复选框_item=QtWidgets.QTableWidgetItem 复选框\u item.setFlags QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled 复选框\u item.setCheckStateQtCore.Qt.Unchecked self.tableWidget.setItemrow,0,文本项 self.tableWidget.setItemrow,1,复选框\u项 如果uuuu name uuuuu==\uuuuuuuu main\uuuuuuuu: 导入系统 app=qtwidts.QApplicationsys.argv checkbox\u style=CheckBoxStyleapp.style app.setStylecheckbox\u样式 w=主窗口 w、 展示 sys.exitapp.exec_
delegate = AlignDelegate(self.tableWidget)
self.tableWidget.setItemDelegateForColumn(1, delegate)