QTableWidget-自动公式驱动单元格

2023-12-11

是否可以使一个单元格成为公式驱动单元格并使其自动更新?与Excel类似。

例如,我希望用户填写两个单元格,然后当用户填充两个单元格时,第三个单元格将自动划分。我希望它不连接到按钮。

QTable 截图

QTableWidget 的代码:

self.tableWidget = {}
for i in range(int(self.numberLine.text())):
    self.tableWidget[i] = QTableWidget()
    self.tableWidget[i].setRowCount(5)
    self.tableWidget[i].setColumnCount(3)
    self.tableWidget[i].setHorizontalHeaderLabels(['OEM (Case {})'.format(i+1), 'ZVI (Case {})'.format (i+1), 'Improvement % '])
    self.tableWidget[i].setVerticalHeaderLabels(['Flow (MMSCFD)', 'HP', 'Specific Power (HP/MMSCFD)', 'Discharge Temp (F)', ''])
    self.tableWidget[i].setFixedSize(QtCore.QSize(480, 180))
    self.gridLayout_14.addWidget(self.tableWidget[i])

一个优雅的解决方案是创建一个继承自的自定义类QTableWidget,您连接的地方itemChanged信号,每次单元格更改值时都会发出此信号(这将返回更改的项目,但仅使用它来验证默认列是否已更改)。

除了不存在用户将不同值设置为浮动的问题之外,我们还将使用 QDoubleValidator,为此我们创建一个自定义 QItemDelegate。

class FloatDelegate(QItemDelegate):
    def __init__(self, _from, _to, _n_decimals, parent=None):
        QItemDelegate.__init__(self, parent=parent)
        self._from = _from
        self._to = _to
        self._n_decimals = _n_decimals

    def createEditor(self, parent, option, index):
        lineEdit = QLineEdit(parent)
        _n_decimals = 2
        validator = QDoubleValidator(self._from, self._to, self._n_decimals, lineEdit)
        lineEdit.setValidator(validator)
        return lineEdit


class CustomTableWidget(QTableWidget):
    _from = 0
    _to = 10**5
    _n_decimals = 2
    def __init__(self, i,  parent=None):
        QTableWidget.__init__(self, 5, 3, parent=parent)
        self.setItemDelegate(FloatDelegate(self._from, self._to, self._n_decimals, self))
        self.setHorizontalHeaderLabels(['OEM (Case {})'.format(i+1), 'ZVI (Case {})'.format (i+1), 'Improvement % '])
        self.setVerticalHeaderLabels(['Flow (MMSCFD)', 'HP', 'Specific Power (HP/MMSCFD)', 'Discharge Temp (F)', ''])
        self.setFixedSize(QSize(480, 180))
        self.itemChanged.connect(self.onItemChanged)

    def onItemChanged(self, item):
        # items (2, 0) = (1, 0) / (0, 0)
        if item.column() == 0 and (item.row() == 0 or item.row()==1):
            num = self.item(1, 0)
            den = self.item(0, 0)
            if num and den:
                resp = float(num.data(Qt.DisplayRole))/float(den.data(Qt.DisplayRole))
                rest_string = str(round(resp, self._n_decimals))
                it = QTableWidgetItem(rest_string, QTableWidgetItem.Type)
                self.setItem(2, 0, it)

Example:

class Widget(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent=parent)
        self.setLayout(QGridLayout())
        for i in range(2):
            self.layout().addWidget(CustomTableWidget(i))

if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    window = Widget()
    window.show()
    sys.exit(app.exec_())

在你的情况下:

self.tableWidget = {}
for i in range(int(self.numberLine.text())):
    self.tableWidget[i] = CustomTableWidget(i)
    self.gridLayout_14.addWidget(self.tableWidget[i])

除了使用验证器之外,我们还可以选择将 QLineEdit 更改为 QDoubleSpinBox。

def createEditor(self, parent, option, index):
    w = QDoubleSpinBox(parent)
    _n_decimals = 2
    w.setMinimum(self._from)
    w.setMaximum(self._to)
    w.setDecimals(self._n_decimals)
    return w
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QTableWidget-自动公式驱动单元格 的相关文章

  • 没有名为 crypto.cipher 的模块

    我现在正在尝试加密一段时间 我最近得到了这个基于 python 的密码器 名为PythonCrypter https github com jbertman PythonCrypter 我对 Python 相当陌生 当我尝试通过终端打开 C
  • 将 saxon 与 python 结合使用

    我需要使用 python 处理 XSLT 目前我正在使用仅支持 XSLT 1 的 lxml 现在我需要处理 XSLT 2 有没有办法将 saxon XSLT 处理器与 python 一起使用 有两种可能的方法 设置一个 HTTP 服务 接受
  • 如何在flask中使用g.user全局

    据我了解 Flask 中的 g 变量 它应该为我提供一个全局位置来存储数据 例如登录后保存当前用户 它是否正确 我希望我的导航在登录后在整个网站上显示我的用户名 我的观点包含 from Flask import g among other
  • 为 Anaconda Python 安装 psycopg2

    我有 Anaconda Python 3 4 但是每当我运行旧代码时 我都会通过输入 source activate python2 切换到 Anaconda Python 2 7 我的问题是我为 Anaconda Python 3 4 安
  • 使用带有关键字参数的 map() 函数

    这是我尝试使用的循环map功能于 volume ids 1 2 3 4 5 ip 172 12 13 122 for volume id in volume ids my function volume id ip ip 我有办法做到这一点
  • shap.TreeExplainer 和 shap.Explainer 条形图之间的区别

    对于下面给出的代码 我得到了不同的条形图shap values 在此示例中 我的数据集为 1000train样本有 9 个类别和 500 个test样品 然后 我使用随机森林作为分类器并生成模型 当我开始生成shap条形图在这两种情况下得到
  • 使用 on_bad_lines 将 pandas.read_csv 中的无效行写入文件

    我有一个 CSV 文件 我正在使用 Python 来解析该文件 我发现文件中的某些行具有不同的列数 001 Snow Jon 19801201 002 Crom Jake 19920103 003 Wise Frank 19880303 l
  • Python pickle:腌制对象不等于源对象

    我认为这是预期的行为 但想检查一下 也许找出原因 因为我所做的研究结果是空白 我有一个函数可以提取数据 创建自定义类的新实例 然后将其附加到列表中 该类仅包含变量 然后 我使用协议 2 作为二进制文件将该列表腌制到文件中 稍后我重新运行脚本
  • 如何在Python中获取葡萄牙语字符?

    我正在研究葡萄牙语 角色看起来很奇怪 我怎样才能解决这个问题 代码 import feedparser import random Vou definir os feeds feeds conf feedurl http pplware s
  • BeautifulSoup 中的嵌套标签 - Python

    我在网站和 stackoverflow 上查看了许多示例 但找不到解决我的问题的通用解决方案 我正在处理一个非常混乱的网站 我想抓取一些数据 标记看起来像这样 table tbody tr tr tr td td td table tr t
  • Flask如何获取请求的HTTP_ORIGIN

    我想用我自己设置的 Access Control Allow Origin 标头做出响应 而弄清楚请求中的 HTTP ORIGIN 参数在哪里似乎很混乱 我在用着烧瓶 0 10 1 以及HTTP ORIGIN似乎是这个的特点之一object
  • 无法在 Python 3 中导入 cProfile

    我试图将 cProfile 模块导入 Python 3 3 0 但出现以下错误 Traceback most recent call last File
  • Jupyter Notebook 内核一直很忙

    我已经安装了 anaconda 并且 python 在 Spyder IPython 等中工作正常 但是我无法运行 python 笔记本 内核被创建 它也连接 但它始终显示黑圈忙碌符号 防火墙或防病毒软件没有问题 我尝试过禁用两者 我也无法
  • Fabric env.roledefs 未按预期运行

    On the 面料网站 http docs fabfile org en 1 10 usage execution html 给出这个例子 from fabric api import env env roledefs web hosts
  • 如何在 Python 中追加到 JSON 文件?

    我有一个 JSON 文件 其中包含 67790 1 kwh 319 4 现在我创建一个字典a dict我需要将其附加到 JSON 文件中 我尝试了这段代码 with open DATA FILENAME a as f json obj js
  • 有人用过 Dabo 做过中型项目吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们正处于一个新的 ERP 风格的客户端 服务器应用程序的开始阶段 该应用程序是作为 Python 富客户端开发的 我们目前正在评估 Dabo
  • 使用 Python 绘制 2D 核密度估计

    I would like to plot a 2D kernel density estimation I find the seaborn package very useful here However after searching
  • 如何计算 pandas 数据帧上的连续有序值

    我试图从给定的数据帧中获取连续 0 值的最大计数 其中包含来自 pandas 数据帧的 id date value 列 如下所示 id date value 354 2019 03 01 0 354 2019 03 02 0 354 201
  • 发送用户注册密码,django-allauth

    我在 django 应用程序上使用 django alluth 进行身份验证 注册 我需要创建一个自定义注册表单 其中只有一个字段 电子邮件 密码将在服务器上生成 这是我创建的表格 from django import forms from
  • 在 Qt 中自动调整标签文本大小 - 奇怪的行为

    在 Qt 中 我有一个复合小部件 它由排列在 QBoxLayouts 内的多个 QLabels 组成 当小部件调整大小时 我希望标签文本缩放以填充标签区域 并且我已经在 resizeEvent 中实现了文本大小的调整 这可行 但似乎发生了某

随机推荐

  • extJS:读取嵌套的 JSON

    我有一个来自 ldap search 调用的漂亮嵌套 JSON 我想使用这些信息来填充 ExtJS ComboBox 但我在读者方面遇到了一些麻烦 显然 我无法在组合框中读取我需要的信息 即人员的邮件地址 uid 和 cn 我认为整个问题都
  • Tensorflow 中的 Triplet、Siamese 和 Softmax

    我想比较以下类型的 CNN 对于两个不同的大型图像数据集的性能 目标是测量两个图像之间的相似度 这两个图像在训练期间都没有见过 我可以使用 2 个 GPU 和 16 个 CPU 核心 Triplet CNN 输入 三张图像 标签 编码到位
  • 如何使用 JavaScript 获取本地 IP 地址? [复制]

    这个问题在这里已经有答案了 我想获取客户端系统的本地IP地址 我如何使用 JavaScript 来实现这一点 我认为如果没有一些服务器交互就无法做到这一点 最简单的方法是向服务器端片段发出 AJAX 请求 在 PHP 中 该片段如下所示
  • 将参数传递给上传器/从上传器内部访问模型的属性/让用户选择缩略图大小

    我想将图像裁剪为用户从列表中选择的尺寸 例如 100x100px 200x200px 我如何将该属性传递给上传者或从上传者中获取模型的属性 从上传器内部访问模型的属性如下不起作用 version thumb do thumbnail siz
  • AccessDeniedHandler 重定向到登录页面

    当 在 Spring Security MVC 中 对页面的访问被拒绝时 由于用户没有足够的权限 尽管他已通过身份验证 我需要通过显示登录页面 而不是标准行为 提供以另一个用户身份登录显示 403 访问被拒绝页面 我可以写一个AccessD
  • 如何将 f-string 与变量一起使用,而不是与字符串文字一起使用?

    我想将 f string 与我的字符串变量一起使用 而不是与用字符串文字定义的字符串一起使用 这是我的代码 name deep mahesh nirbhay user input r certi element this string I
  • 从 LAN 上的任何计算机访问 Apache VirtualHost?

    我有 wamp 设置 其中有很多网站设置为 httpd conf 中的虚拟主机
  • MKCircle 没有更新半径,但它正在平移

    我必须将 MKCicle 绘制到 MKMapView 中 然后 当用户通过滑块更改半径时 我必须重新绘制它 我删除它并重新创建它 将其重新添加到地图中 但我并没有按照我的预期进行操作 而是看到 MKCircle 在地图上平移 并保持相同的大
  • 如何使用 pygit2 进行 git 合并

    我尝试将分支合并到主分支中 repo pygit2 Repository path to repo branch repo lookup branch upstream branch pygit2 GIT BRANCH REMOTE oid
  • 如何使用 JSoup 通过表单提交文本

    我想使用 JSoup 向此表单提交一些文本 我该怎么做呢
  • VBA 跟踪文件使用情况

    我目前有一个生成客户报表的 Excel 文件 我需要跟踪谁运行了他们的报表 目前 每当生成语句时 我都会有一个宏向我发送一封包含其用户名的电子邮件 然而 在瘦客户端系统上运行的人们会收到提示 一个程序正在尝试代表您发送电子邮件 有什么方法可
  • 将响应转发到不同的 URL 时,在 API 管理策略表达式中将响应正文从 XML 转换为 Json

    将响应转发到不同的 URL 时 如何将响应正文从 XML 更改为 Json 我专门将响应转发到 Azure 服务总线 我尝试了许多不同的方法将 XML 序列化为 json 但没有成功 因为策略表达式中不允许使用某些 JsonConvert
  • 在本地化系统上强制以英语输出 PowerShell 错误

    我需要在各种操作系统上运行一些 PowerShell 脚本 其中大多数都是英文版本 但是 有些是本地化的 例如德语 法语 西班牙语等 问题是本地系统管理员现在大多不使用 PowerShell 并且在脚本失败并向他们抛出错误的情况下 而不是阅
  • Conda Build - 创建 Conda 包因平台 win-64 的依赖项而失败

    从本地目录构建我的第一个 conda 包 遵循 CONDA 网站的说明 https conda io docs user guide tasks build packages recipe html 我收到以下错误 conda build
  • SonarQube 分析未显示代码覆盖率

    我有一个 Jenkins 项目来对我的 NodeJS 项目进行 SonarQube 分析 我添加了istanbul作为对我的项目的依赖package json 在 Jenkins 构建配置中 首先我运行一个 shell 脚本 cd proj
  • 最佳适应调度算法

    有多个活动 每个活动都有多个会议时间 我需要找到一种会议时间安排 以便每个日程表仅包含任何给定事件一次 使用每个事件的多个会议时间之一 我可以使用暴力 但这很少是最好的解决方案 我更喜欢任何可以阅读此内容的链接 甚至只是一个我可以谷歌搜索的
  • 当我使用添加函数时断言失败

    在一个表中 我有 3 个索引 每个索引调用一个函数 在每个函数中 都有一个添加按钮 用于将数据添加到 CoreData 中 前 2 个有效 但是当我按第三个索引并按 Add 时 会出现此错误 2011 07 19 16 57 11 079
  • Powershell 转义包含密码的变量

    因此 我使用一个包含密码的变量 最近发现某些密码包含特殊字符 我无法控制密码是什么 所以我必须处理我收到的任何内容 我知道后面的勾号 字符是用来转义字符的 这篇文章的全部原因是我发现密码是文本文件 并将找到的密码替换为 xxxxxxxxx
  • 在 Android 中向 gridview 添加页眉和页脚

    我正在尝试在我的 Android 应用程序中创建具有以下功能的用户个人资料页面 标题 gridview 显示该用户的一堆照片 页脚 当应用程序在网格视图中下载更多照片时的下载图标 header需要与gridview一起移动 换句话说 个人资
  • QTableWidget-自动公式驱动单元格

    是否可以使一个单元格成为公式驱动单元格并使其自动更新 与Excel类似 例如 我希望用户填写两个单元格 然后当用户填充两个单元格时 第三个单元格将自动划分 我希望它不连接到按钮 QTable 截图 QTableWidget 的代码 self