Python Qt: 设置 QTableWidget 第一列不可编辑,其他列可编辑

本文将介绍如何使用 Python 和 Qt 库中的 QTableWidget 控件,设置表格的第一列为只读,其他列可编辑。

代码实现

from PyQt5.QtWidgets import QMainWindow, QLabel, QLineEdit, QPushButton, QTableWidget, QStyledItemDelegate

class ReadOnlyDelegate(QStyledItemDelegate):
    def createEditor(self, parent, option, index):
        return None

class Oper_Reader_Window(QMainWindow):
    def __init__(self, parent=None):
        super(Oper_Reader_Window, self).__init__(parent)
        self.setWindowTitle('读者操作界面')
        self.resize(400, 300)

        # 创建界面控件
        self.label_readerName = QLabel('输入姓名:')
        self.edit_readerName = QLineEdit()
        self.btn_search_readerName = QPushButton('搜索')
        self.table_reader = QTableWidget(5, 7)
        self.table_reader.setHorizontalHeaderLabels(['借书证号','姓名', '性别', '出生年月', '借书量', '联系方式', '备注'])
        
        # 设置第一列为只读
        delegate = ReadOnlyDelegate(self.table_reader)
        self.table_reader.setItemDelegateForColumn(0, delegate)

        # 设置其他列可编辑
        for i in range(1, 7):
            delegate = QStyledItemDelegate(self.table_reader)
            self.table_reader.setItemDelegateForColumn(i, delegate)

        self.label_choose_operReader = QLabel('选择操作')
        self.btn_add_reader = QPushButton('添加读者')
        self.btn_alter_reader = QPushButton('修改选中读者')
        self.btn_del_reader = QPushButton('删除读者')
        self.btn_back_2 = QPushButton('返回')

代码解析

  1. 创建 ReadOnlyDelegate: 该类继承自 QStyledItemDelegate,重写 createEditor 方法,使其返回 None,从而阻止创建编辑器,达到只读效果。
  2. 设置第一列为只读: 使用 setItemDelegateForColumn 方法,为第一列 (索引为 0) 设置 ReadOnlyDelegate 实例,使其不可编辑。
  3. 设置其他列可编辑: 使用循环遍历第 2 列到第 7 列 (索引从 1 到 6),分别为它们设置 QStyledItemDelegate 实例,使其可编辑。

总结

通过上述代码,您可以轻松地设置 QTableWidget 控件中特定列的编辑状态。在实际应用中,您可以根据需要修改列的索引和编辑状态。

希望本文对您有所帮助!

Python Qt: 设置 QTableWidget 第一列不可编辑,其他列可编辑

原文地址: https://www.cveoy.top/t/topic/oPNR 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录