仕様
- コード実行時にQTableWidgetとQTableWidgetItemを生成
- QTableWidget内のボタンをクリックするとボタンとその行の色などを変える
- Itemを編集しているのではなく同じ内容を保持して色だけを変えたItemで上書きしているイメージ
- Itemの中身を読みだすところは上手いこと整合が必要
サンプルソースコード
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(828, 656)
self.tableWidget = QtWidgets.QTableWidget(Form)
self.tableWidget.setGeometry(QtCore.QRect(40, 50, 621, 511))
self.tableWidget.setObjectName("tableWidget")
self.tableWidget.setColumnCount(4)
self.tableWidget.setRowCount(50)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(0, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(1, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(2, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(3, item)
for i in range(5):
self.btn = QtWidgets.QPushButton()
self.btn.setText("未")
self.tableWidget.setCellWidget(i,0,self.btn)
self.btn.clicked.connect(Form.btn_click)
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
item = self.tableWidget.horizontalHeaderItem(0)
item.setText(_translate("Form", "0"))
item = self.tableWidget.horizontalHeaderItem(1)
item.setText(_translate("Form", "1"))
item = self.tableWidget.horizontalHeaderItem(2)
item.setText(_translate("Form", "2"))
item = self.tableWidget.horizontalHeaderItem(3)
item.setText(_translate("Form", "3"))
class main(QtWidgets.QDialog):
def __init__(self,parent=None):
super(main, self).__init__(parent)
self.ui = Ui_Form()
self.ui.setupUi(self)
for i in range(3):
self.ui.tableWidget.setItem(0,i+1,QtWidgets.QTableWidgetItem("a"+str(i)))
for j in range(3):
self.ui.tableWidget.setItem(1,j+1,QtWidgets.QTableWidgetItem("b"+str(j)))
for k in range(3):
self.ui.tableWidget.setItem(2,k+1,QtWidgets.QTableWidgetItem("c"+str(k)))
def btn_click(self):
state = self.sender()
index = self.ui.tableWidget.indexAt(state.pos())
if index.isValid():
print(index.row(), index.column())
self.btn_sub = QtWidgets.QPushButton()
self.btn_sub.setText("完了")
self.btn_sub.setStyleSheet('QPushButton {background-color: #FF0000; color: white;}')
self.ui.tableWidget.setCellWidget(index.row(),index.column(),self.btn_sub)
#値取得
row =index.row()
column_cnt = self.ui.tableWidget.columnCount()
get_list =[]
for i in range(column_cnt - 1):
get_list.append(self.ui.tableWidget.item(row,i+1).text())
print(get_list)
#値と色を上書き
for j in range(column_cnt-1):
item = QtWidgets.QTableWidgetItem()
item.setBackground(QtGui.QColor(0, 255, 0))
print(j)
item.setText(get_list[j])
self.ui.tableWidget.setItem(row,j+1,item)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
window = main()
window.show()
sys.exit(app.exec_())
コメントを残す