python - 如何在 QTablewidget 列的列上应用验证器?
问题描述
我在 Qt 设计器中创建了一个表。在表的第 2 列中,我希望用户输入只能是大写字母。如何做同样的事情?
在这里我无法理解可以在这里使用 QTableWidget 或 QTableWidgetItem 的哪个实用程序?
解决方案
您可以使用委托来修改用户输入:
from PyQt5 import QtCore, QtGui, QtWidgets
class UpperDelegate(QtWidgets.QStyledItemDelegate):
def createEditor(self, parent, index, option):
editor = super(UpperDelegate, self).createEditor(parent, index, option)
font = QtGui.QFont(editor.font())
font.setCapitalization(QtGui.QFont.AllUppercase)
editor.setFont(font)
return editor
"""def initStyleOption(self, option, index):
super(UpperDelegate, self).initStyleOption(option, index)
font = QtGui.QFont(option.font)
font.setCapitalization(QtGui.QFont.AllUppercase)
option.font = font"""
def setModelData(self, editor, model, index):
text = editor.property("text")
if isinstance(text, str):
editor.setProperty("text", text.upper())
super(UpperDelegate, self).setModelData(editor, model, index)
# model.setData(index, editor.text().upper(), QtCore.Qt.DisplayRole)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = QtWidgets.QTableWidget(10, 4)
delegate = UpperDelegate(w)
w.setItemDelegateForColumn(1, delegate)
w.show()
sys.exit(app.exec_())
推荐阅读
- java - 谷歌图书馆照片 API
- java - 从 JSONArray 获取 JSONObject
- c# - 如何在 Swagger 中根据需要标记属性,无需 ASP.NET 模型验证?
- spring-boot - Spring Boot Kafka消费者抛出没有名为“kafkaListenerContainerFactory”的bean可用
- hibernate - 锁定存储库,让只写一个进程
- angular - 角度点击去抖动
- node.js - 通过 .sh 脚本在不同的终端选项卡中并行启动两个节点脚本
- ajax - TYPO3 (v9.5) 使用 Ajax 加载新闻扩展
- android-studio - 错误:找不到符号类 ReactApplication
- c# - 使用 EF 核心批量扩展时属性的 ConcurrencyCheck 属性未更新数据库中的列值