QtableWidget的第一列输入为时间格式,第二列输入为数字并包含正负数,小数格式
时间: 2025-04-03 07:11:40 浏览: 51
要在 `QTableWidget` 中实现第一列为时间格式,第二列为支持正负小数的数字格式,可以通过自定义验证器(Validator)以及设置单元格编辑完成后的回调函数来达到效果。
### 实现步骤
1. **导入必要的模块**:需要用到 `PyQt5` 和 Python 内置的时间处理库。
2. **初始化表格及列标题**:创建两列分别命名为 "时间" 和 "数值"。
3. **为每个单元格提供合适的输入限制**:
- 第一列使用 `QDateTimeEdit` 控件或手动校验输入是否满足时间格式。
- 第二列使用 `QDoubleSpinBox` 控件允许用户输入浮点型数值,设定范围以适应正负值需求。
下面给出一段具体的代码示例:
```python
from PyQt5.QtCore import QDateTime, Qt
from PyQt5.QtGui import QRegExpValidator
from PyQt5.QtWidgets import QApplication, QTableWidget, QLineEdit, QAbstractItemView, QWidget, QVBoxLayout
import re
class CustomTable(QWidget):
def __init__(self):
super().__init__()
self.table = QTableWidget(0, 2) # 设置初始行数为零,两列
self.table.setHorizontalHeaderLabels(['时间', '数值']) # 定义列名
# 只能选择整行不能单选某个cell元素内容
self.table.setSelectionBehavior(QAbstractItemView.SelectRows)
# 添加一行按钮
add_button = QPushButton('Add Row')
add_button.clicked.connect(self.addRow)
main_layout = QVBoxLayout()
main_layout.addWidget(add_button)
main_layout.addWidget(self.table)
self.setLayout(main_layout)
def addRow(self):
new_row_index = self.table.rowCount()
self.table.insertRow(new_row_index)
time_edit = QLineEdit() # 时间字段文本框
regx_time = r"^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})$" # 匹配标准日期+时刻表达式样式如YYYY-MM-DD HH:mm:ss的形式
validator_time = QRegExpValidator(re.compile(regx_time))
time_edit.setValidator(validator_time)
self.table.setCellWidget(new_row_index , 0, time_edit )
spin_box = QLineEdit() # 数字字段文本框,默认开启上下箭头调整步长机制
regx_num = r"-?\d+(\.\d+)?" # 正则模式匹配带符号的小数形式字符串序列
validator_num = QRegExpValidator(re.compile(regx_num))
spin_box.setValidator(validator_num)
self.table.setCellWidget(new_row_index , 1, spin_box )
if __name__ == "__main__":
app = QApplication([])
demo = CustomTable()
demo.resize(600, 800)
demo.show()
sys.exit(app.exec_())
```
上述脚本构建了一个具备添加行功能的窗口界面,在每增加的一行里面包含了两个特定类型的输入控件,分别是受约束只能接受合法ISO 8601日期时间和可容纳带符号小数形态的数据录入空间。此外还设置了当某一行被整体挑选起来时候的表现行为一致化管理规则等细节优化措施。
---
阅读全文
相关推荐


















