Python Qt: 设置 QTableWidget 第一列不可编辑,其他列可编辑
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('返回')
代码解析
- 创建
ReadOnlyDelegate类: 该类继承自QStyledItemDelegate,重写createEditor方法,使其返回None,从而阻止创建编辑器,达到只读效果。 - 设置第一列为只读: 使用
setItemDelegateForColumn方法,为第一列 (索引为 0) 设置ReadOnlyDelegate实例,使其不可编辑。 - 设置其他列可编辑: 使用循环遍历第 2 列到第 7 列 (索引从 1 到 6),分别为它们设置
QStyledItemDelegate实例,使其可编辑。
总结
通过上述代码,您可以轻松地设置 QTableWidget 控件中特定列的编辑状态。在实际应用中,您可以根据需要修改列的索引和编辑状态。
希望本文对您有所帮助!
原文地址: https://www.cveoy.top/t/topic/oPNR 著作权归作者所有。请勿转载和采集!