22

私は私のアプリのGUIを定義する次のコードを持っています

class Ui (object):
    def setupUi():
        self.tableName = QtGui.QTableWidget(self.layoutWidget_20)
        self.tableName.setObjectName(_fromUtf8("twHistoricoDisciplinas"))
        self.tableName.setColumnCount(4)
        self.tableName.setRowCount(3)

そして私のアプリの次のコード

class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        self.ui = Ui()
        self.ui.setupUi(self)
        self.createtable()

    #creating a tw cell
    def cell(self,var=""):
            item = QtGui.QTableWidgetItem()
            item.setText(var)
            return item

    def createtable(self):
         rows = self.tableName.rowCount()
         columns = self.tableName.columnCount()
         for i in range(rows):
             for j in range(columns):
                 item = self.cell("text")
                 self.ui.tableName.setItem(i, j, item)

新しい行と列を追加して編集できるようにしたいのですが、一部のセルをロックしたいと思います。(私はすでにテーブルを拡張するコードを持っています)他のセルを読み取り/書き込みのままにして、一部のセルを読み取り専用にする方法はありますか?このリンクを見つけましたQTableWidgetの列を読み取り専用にする方法は?C ++の問題の解決策で、Pythonの解決策は似ていますか?

編集:投稿から回答を削除し、回答として貼り付けました

4

5 に答える 5

30

私はコードを少し遊んで、さらにいくつかのドキュメントを読んで、問題の答えは次のとおりです。

def createtable(self):
     rows = self.tableName.rowCount()
     columns = self.tableName.columnCount()
     for i in range(rows):
         for j in range(columns):
             item = self.cell("text")
             # execute the line below to every item you need locked
             item.setFlags(QtCore.Qt.ItemIsEnabled)
             self.ui.tableName.setItem(i, j, item)

解決策は「item.setFlags(QtCore.Qt.ItemIsEnabled)」という行です。これを使用してセルプロパティQtCore.Qt.ItemIsEnabledを無効に設定しているため、セルを選択または編集することはできません。

Qt :: ItemFlagセクションのhttp://doc.qt.io/archives/qt-4.8/qt.htmlのdocumentarionに従って、実行時にこの方法で他の多くのプロパティを変更できます。

この質問に対する2番目の回答に関するSvenのコメントで述べたように、QTableWidgetItemに静的な数の行と列がある場合、Qtdesignerを使用してアプリケーションの画面を作成すると、セルのプロパティを選択できます。

于 2011-10-13T15:32:26.233 に答える
21

編集トリガーがない場合、QTableWidgetItemの編集ステータスは入力されません。

self.tableName.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)

于 2017-02-10T09:56:52.840 に答える
17

SvenKrügerの答えのように、 PyQt5にもこのメソッドを使用できます。

self.tableWidget.setEditTriggers(QtWidgets.QTableWidget.NoEditTriggers)
于 2018-04-20T22:01:01.913 に答える
2

UIを同じように見せたい場合(まだ選択可能で、青色に変わりますが、編集できないだけです)、QtCore.Qt.ItemIsEditable良い結果が得られることがわかりました。

item = QtWidgets.QTableWidgetItem()
item.setFlags(item.flags() ^ QtCore.Qt.ItemIsEditable)
self.table_widget.setItem(row, column, item)
于 2021-10-06T06:57:00.180 に答える
0

PyQt6の場合、@ ozcanyarimdunyaと同じですが、列挙型がありEditTriggerます:

self.tableWidget.setEditTriggers(QTableWidget.EditTrigger.NoEditTriggers)
于 2022-02-24T03:38:40.037 に答える