я хочу выровнять свой флажок, который находится в 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, как я могу изменить цвет ячейки.
кажется, 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.setFocusPolicy(False)
delegate = AlignDelegate(self.tableWidget)
self.tableWidget.setItemDelegateForColumn(1, delegate)
, не знаю почему. но не работает Вопрос 5. почему не работает?
Вот мой скриншот моей программы.
, если вы сможете решить вопрос 1. этого будет достаточно для меня.
потому что другой ответ заставит меня изменить весь следующий код.
другие вопросы просто говорят, что я пытался, и они создают больше проблем.