PyQt5 QTableWidget如何限制用户仅输入数字?
QTableWidget限制仅输入数字(支持动态新增元素)
不用逐个给单元格设置限制,直接用**自定义委托(QItemDelegate)**就能全局生效,不管是已有单元格还是后续新增的元素,编辑时都会自动限制输入数字。
实现步骤
自定义数字输入委托
继承QItemDelegate,重写createEditor方法,返回带数字验证器的QLineEdit。根据需求选择整数验证器(QIntValidator)或小数验证器(QDoubleValidator)。给QTableWidget绑定委托
可以给指定列设置委托(只限制某列输入数字),或者给整个表格设置委托(所有列都限制)。
完整PyQt5代码示例
import sys from PyQt5.QtWidgets import (QApplication, QMainWindow, QTableWidget, QTableWidgetItem, QItemDelegate, QLineEdit) from PyQt5.QtGui import QIntValidator, QDoubleValidator class NumberInputDelegate(QItemDelegate): def __init__(self, is_integer=True, parent=None): super().__init__(parent) self.is_integer = is_integer def createEditor(self, parent, option, index): # 创建带数字验证的输入框 editor = QLineEdit(parent) if self.is_integer: # 整数验证器,可自定义范围,示例为0到9999 validator = QIntValidator(0, 9999, editor) else: # 小数验证器,自定义范围和精度(保留2位小数) validator = QDoubleValidator(0.0, 9999.99, 2, editor) validator.setNotation(QDoubleValidator.StandardNotation) editor.setValidator(validator) return editor class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("QTableWidget数字输入限制") self.table = QTableWidget(self) self.setCentralWidget(self.table) # 初始化表格:3行2列 self.table.setRowCount(3) self.table.setColumnCount(2) self.table.setHorizontalHeaderLabels(["整数列", "小数列"]) # 给列绑定委托 # 第0列限制整数输入 int_delegate = NumberInputDelegate(is_integer=True) self.table.setItemDelegateForColumn(0, int_delegate) # 第1列限制小数输入 double_delegate = NumberInputDelegate(is_integer=False) self.table.setItemDelegateForColumn(1, double_delegate) # 初始化已有元素 for row in range(3): self.table.setItem(row, 0, QTableWidgetItem("123")) self.table.setItem(row, 1, QTableWidgetItem("45.67")) # 模拟动态新增行(实际场景可绑定按钮触发) self.add_new_row() def add_new_row(self): row_count = self.table.rowCount() self.table.insertRow(row_count) # 新增行自动继承列的委托限制 self.table.setItem(row_count, 0, QTableWidgetItem("789")) self.table.setItem(row_count, 1, QTableWidgetItem("0.12")) if __name__ == "__main__": app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec_())
关键说明
- 委托会自动应用到对应列的所有单元格,包括后续动态新增的行,无需逐个设置验证器。
- 可根据需求调整验证器范围(支持正负数字、自定义小数精度),修改
QIntValidator或QDoubleValidator的参数即可。 - 如果使用C++ Qt,逻辑完全一致:自定义继承
QItemDelegate的类,重写createEditor方法返回带QValidator的QLineEdit,再调用setItemDelegateForColumn绑定到表格。
内容的提问来源于stack exchange,提问作者Ismoilmirzo Inoyatov
相关产品推荐
相关产品推荐

