前提
PythonでQT5のtableviewでアプリを作成しています
実現したいこと
特定のセルを非活性で表示させる
+
特定のセルをボタンを押すことにより非活性・活性の切替をしたい
発生している問題
実現したいことに対する実装方法をネットで調査しても見つからない
該当のソースコード
table_data_ は本来MySQLのテーブルからのデータですが、中身を明かせないのでダミーです
python3.9
1import sys 2 3from PyQt5.QtCore import * 4from PyQt5.QtGui import * 5from PyQt5.QtWidgets import * 6 7table_data_ = {'1.':['','','','','','','','',''], 8 '2.':['3','非活性にしたい','非活性にしたい','4','5','6','非活性にしたい','8','9'], 9 '3.':['12','0','0','4','15','6','0','18','12']} 10 11class TableView(QTableWidget): 12 def __init__(self, data, *args): 13 QTableWidget.__init__(self, *args) 14 self.data = table_data_ 15 self.setData() 16 17 # 列のサイズ調整 18 self.resizeColumnsToContents() 19 # 行のサイズ調整 20 self.resizeRowsToContents() 21 def setData(self): 22 horHeaders = [] 23 for n, key in enumerate(sorted(self.data.keys())): 24 horHeaders.append(key) 25 for m, item in enumerate(self.data[key]): 26 newitem = QTableWidgetItem(item) 27 self.setItem(m, n, newitem) 28 self.setHorizontalHeaderLabels(horHeaders) 29 30class window(QWidget): 31 def __init__(self, parent = None): 32 super(window, self).__init__(parent) 33 34 windowWidth = 1300 35 windowHeight = 700 36 37 self.resize(windowWidth,windowHeight) 38 self.setWindowTitle("フォーム") 39 40 self.table = TableView(table_data_, 9, 3, self) 41 self.table.resize(windowWidth - 100,windowHeight - 100) 42 self.table.move(20,20) 43 44 self.button = QPushButton('button', self) 45 self.button.setStyleSheet("QPushButton{color:black;background-color:gray;}") 46 self.button.setStyleSheet("QPushButton:pressed{color:teal;background-color:coral;}") 47 self.button.move(windowWidth - 200,windowHeight - 50) 48 self.button.clicked.connect(self.change_table_val) 49 self.button2 = QPushButton('終了', self) 50 self.button2.setStyleSheet("QPushButton{color:black;background-color:gold;}") 51 self.button2.move(windowWidth - 100,windowHeight - 50) 52 self.button2.clicked.connect(self.exit) 53 54 # 行カウント 55 rowPosition = self.table.rowCount() 56 57 # ボタンウィジェットを設定 58 for num in range(rowPosition): 59 button = QPushButton(self) 60 button.setText('Click!') 61 # ボタンのイベントを登録 62 button.clicked.connect(self.change_table_val) 63 self.table.setCellWidget(num, 0, button) 64 65 66 # 値を変更させる 67 def change_table_val(self): 68 # 非活性→活性化 69 pass 70 71 72 self.table.setData() 73 # 画面を終了させる 74 def exit(self) -> None: 75 self.close() 76 77def main(): 78 app = QApplication(sys.argv) 79 ex = window() 80 ex.show() 81 sys.exit(app.exec_()) 82if __name__ == '__main__': 83 main() 84
気になること
ググって以下のソースを見つけました。
実装には加えてません。
def flags(self, index):
return QtCore.Qt.ItemIsEditable | QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable
がポイント?
よろしくお願いします。

下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
2022/08/03 13:02
2022/08/08 01:33
2022/08/08 03:32 編集