如何使 QTreeWidget 中的特定列成为整数/浮点数,以便用户无法输入任何字母或符号而不是整数/浮点数?

2024-04-27

我正在 PyQt5 中使用 QTreeWidget 制作 GUI。我希望特定列仅是整数列。用户不应该能够在其中输入任何非整数项。我看到了一些使用 QVariant 的方法,但它似乎不能满足我的要求。

这就是我的found https://stackoverflow.com/questions/13074035/qtablewidget-integer! 但在我看来,这就像从后端设置数据而不是从用户端设置数据。

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(478, 320)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
        self.verticalLayout.setObjectName("verticalLayout")
        self.treeWidget = QtWidgets.QTreeWidget(self.centralwidget)
        self.treeWidget.setAlternatingRowColors(True)
        self.treeWidget.setObjectName("treeWidget")
        item_0 = QtWidgets.QTreeWidgetItem(self.treeWidget)
        item_1 = QtWidgets.QTreeWidgetItem(item_0)
        item_1.setFlags(QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsEditable|QtCore.Qt.ItemIsDragEnabled|QtCore.Qt.ItemIsUserCheckable|QtCore.Qt.ItemIsEnabled)
        self.verticalLayout.addWidget(self.treeWidget)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 478, 20))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.treeWidget.headerItem().setText(0, _translate("MainWindow", "Some other data"))
        self.treeWidget.headerItem().setText(1, _translate("MainWindow", "Only Integers"))
        __sortingEnabled = self.treeWidget.isSortingEnabled()
        self.treeWidget.setSortingEnabled(False)
        self.treeWidget.topLevelItem(0).setText(0, _translate("MainWindow", "Text"))
        self.treeWidget.topLevelItem(0).child(0).setText(0, _translate("MainWindow", "Sub Text"))
        self.treeWidget.setSortingEnabled(__sortingEnabled)


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

这是代码和图像。请让我知道我应该在代码中进行哪些更改才能实现我的目标。提前致谢。


您必须在第二列中建立一个代表,该代表具有编辑者QSpinBox:

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    # ...


class IntegerDelegate(QtWidgets.QStyledItemDelegate):
    def createEditor(self, parent, option, index):
        editor = QtWidgets.QSpinBox(parent)
        editor.setFrame(False)
        editor.setMinimum(-2147483648)
        editor.setMaximum(2147483647)
        editor.setSizePolicy(
            QtWidgets.QSizePolicy.Ignored, editor.sizePolicy().verticalPolicy()
        )
        return editor


class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)
        delegate = IntegerDelegate(self.treeWidget)
        self.treeWidget.setItemDelegateForColumn(1, delegate)


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

Update:

class DoubleDelegate(QtWidgets.QStyledItemDelegate):
    def createEditor(self, parent, option, index):
        editor = QtWidgets.QDoubleSpinBox(parent)
        editor.setFrame(False)
        editor.setMinimum(-1.7976931348623157e+308)
        editor.setMaximum(1.7976931348623157e+308)
        editor.setSizePolicy(
            QtWidgets.QSizePolicy.Ignored, editor.sizePolicy().verticalPolicy()
        )
        return editor
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使 QTreeWidget 中的特定列成为整数/浮点数,以便用户无法输入任何字母或符号而不是整数/浮点数? 的相关文章

随机推荐

  • 父元素的递归串联

    我有一个看起来像这样的表 ID Name Parent 1 A NULL 2 B NULL 3 C 1 4 D 1 5 E 3 6 F 5 我想要一个视图返回这个 ID Name ParentNames 1 A 2 B 3 C A 4 D
  • 使用正则表达式从字符串中提取日期和时间

    我正在开发一个正则表达式 它接受所有可能的日期和时间格式 以从句子中提取它们 这是我的正则表达式 31 0 13578 1 02 Jan Mar May Jul Aug Oct Dec 1 1 30 0 1 3 9 1 0 2 Jan Ma
  • 在 SQL Azure 数据库中创建链接服务器[重复]

    这个问题在这里已经有答案了 我们使用两个用于跨数据库查询的数据库 一个名为 azureDB1 另一个名为 azureDB2 这些数据库驻留在我的 Azure 云 SQL Server 上 我们的场景是从 azureDB1 调用驻留在 azu
  • Java 语法

    这段代码 List
  • 使用 'with' 时 Laravel ownsTo 返回 null

    我刚刚开始使用 Laravel 所以请原谅任何菜鸟 我有一个User and Order模型中 一个用户有多个订单 Inside User model public function orders this gt hasMany Order
  • 通过 requests 模块发送 JSON 并使用 Bottle.py 和cherrypy 捕获它

    我有一个服务器需要能够接受 JSON 然后处理它 然后发回 JSON 我的服务器端的代码正在使用Bottle py 与cherrypy 所关注的路线如下 route tagTweets method POST def tagTweets r
  • System.Windows.Application.GetResourceStream 返回 null

    如果我调试一个以 Catalog xaml 作为内容的 WPF 应用程序 我无法获取它的资源流 GetResourceStream 返回 null var uri new Uri Assembly component Catalog xam
  • 如何从 Flask 调用另一个 Web 服务 api

    我在 Flask 服务器中使用重定向来调用另一个 Web 服务 api e g app route hello def hello return redirect http google com 网址逻辑上会更改为 google com 但
  • 如何在 psql 中使用数组包含值子句进行选择

    我有专栏arr这是类型array 我需要获取行 在哪里arr列包含值s 这个查询 SELECT FROM table WHERE arr gt ARRAY s 给出错误 错误 运算符不存在 字符变化 gt 文本 为什么它不起作用 附注我知道
  • 只响应第一个 WM_KEYDOWN 通知?

    Win32 应用程序如何仅响应第一个 WM KEYDOWN 通知 MSDN 文档声称第 30 位 指定先前的按键状态 如果在发送消息之前按键处于按下状态 则该值为 1 如果按键处于按下状态 则该值为 0 但在我的 WndProc 中 第 3
  • 在 shell 中将 ANSI 转换为 UTF-8

    我正在制作一个解析器 1 csv 到 3 csv 脚本 但遇到问题 我是法国人 所以用我的语言我有这样的字母 一位客户向我发送了一个 csv 文件 Linux 将其识别为 unknown 8bit 我猜是 ansi 在我的脚本中 我正在编写
  • 格式化文本文件,解析完成后如何更新文件?

    如何打开文件 对文件执行一些正则表达式 然后保存文件 我知道我可以打开一个文件 逐行读取 但是如何更新文件的实际内容然后保存文件 无论文件大小如何 以下方法都可以工作 并且如果操作在完成之前失败 也不会损坏原始文件 string input
  • 计算向量中连续 1 和 0 的数量

    在 Matlab 中我有一个如下所示的向量 0 0 1 1 0 0 0 1 1 0 0 0 0 1 1 1 0 0 0 0 1 0 1 我现在要做的是统计这个向量中1的个数 连续的 1 算作 1 此外 我还想计算 1 之间 0 的平均值和中
  • CTYPE_ALNUM 的奇怪之处

    我的 PHP 函数 CTYPE ALNUM 有一个奇怪的问题 if i do PHP words if ctype alnum words Echo Don t work else Echo Work 这将回显 工作 但是如果我有一个表格
  • 导入图标动态反应 fontawesome

    我在 React js 项目中使用 FontawesomeIcon 图标的名称来自数据库 我想动态地从 fortawesome free solid svg icons 导入来自数据库的图标 import React Component f
  • jQuery 替换 href 值但仅部分替换? [复制]

    这个问题在这里已经有答案了 可能的重复 使用 jQuery 更改 href 参数 https stackoverflow com questions 6540106 change href parameter using jquery 我有
  • 当 MATLAB 发生错误时如何继续循环?

    我正在使用函数将一些 dat 文件转换为 mat 文件 我在循环内调用此函数来转换多个文件 在某些情况下 我的 dat 文件已损坏 函数无法转换并发生错误 从而停止循环 现在我的问题是 是否有任何命令 当错误发生时 它应该跳过循环中的当前
  • 在 Three.js 中将贝塞尔曲线转换为平面道路

    我试图根据之前计算得到的一些贝塞尔曲线在 Three js 中绘制一条弯曲的道路 问题是我找不到转换曲线序列的方法 一条从上一条曲线的末尾开始 到一个曲面 我有一个 3D 场景 其中有一些汽车 一条用飞机创建的道路 并且绘制了即将到来的道路
  • 如何在 Qt 5 中写入和读取 QResource 文件?

    很奇怪 我通过以下方式将所需的文件添加到资源中添加现有文件 文件就在那里 我运行 qmake 构建 gt 运行 qmake 以使文件可用 第一期 我无法从输出终端向文件写入任何内容 但是当我手动写入文件时 每次运行它时输出终端都会显示更改
  • 如何使 QTreeWidget 中的特定列成为整数/浮点数,以便用户无法输入任何字母或符号而不是整数/浮点数?

    我正在 PyQt5 中使用 QTreeWidget 制作 GUI 我希望特定列仅是整数列 用户不应该能够在其中输入任何非整数项 我看到了一些使用 QVariant 的方法 但它似乎不能满足我的要求 这就是我的found https stac